내 문제는 다음입니다 fulltextindex 등을 사용하여 효율적인 쿼리 도중 수행.
여기 조건
- ID가 (BIGINT)
- msgtimeutc (BIGINT)
- 피사체 (tinytext)
- 본체 (텍스트)
- 다른 데이터가 표시 될이 테이블의 중요한 분야이다
0 :
나는이 테이블에 전체 텍스트 인덱스가
SELECT M.some_data
FROM mailmessage M
WHERE M.MSGTIMEUTC >= 1343651965 AND M.MSGTIMEUTC <= 1344170365
AND (MATCH (M.BODY,M.SUBJECT) AGAINST ('test'));
MySQL의를
- 2 개 인덱스를 사용할 수 없습니다 :
나는 몸과 주제의 텍스트를 검색과 같은 msgtimeutc에 날짜 시간에 의해 축소 요청 을 할 필요가 동시에 (msgtimeutc와 fulltextindex에있는 것). 그래서 내 질문은 그것이 BIGINT이기 때문에 나는 전체 텍스트 인덱스에 msgtimeutc을 포함 할 수 없습니다 msgtimeutc
- 에 전체 테이블 스캔을하고 종료하고 나는 위 또는 아래에
그래서 쿼리가 복용 방법에 뭐하는 거지 너무 오랜 시간 (및 I/O)!
나는 (샘플 코드는 테스트하지)
SELECT M1.some_data FROM mailmessage M1
WHERE M1.MSGTIMEUTC >= 1343651965 AND M1.MSGTIMEUTC <= 1344170365
INTERSECT
SELECT M2.some_data FROM mailmessage M2
WHERE (MATCH (M2.BODY,M2.SUBJECT) AGAINST ('test'));
(스크롤 죄송합니다) 설명과 같이 교 차 을하는 것에 대해 문질러서 :
+----+-------------+-------+----------+---------------------------------+----------------------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+----------+---------------------------------+----------------------+---------+------+------+-------------+
| 1 | SIMPLE | M | fulltext | msgtimeutc,mailmessage_fulltext | mailmessage_fulltext | 0 | | 1 | Using where |
+----+-------------+-------+----------+---------------------------------+----------------------+---------+------+------+-------------+
을하지만, MySQL의에 존재하지 않습니다
아래 2와 같은 기타 요청은 전체 테이블 스캔도 수행합니다.
SELECT M.some_data
FROM mailmessage M
WHERE
M.id in (
select m2.id from mailmessage m2 use index(mailmessage_fulltext)
where (MATCH (m2.BODY,m2.SUBJECT) AGAINST ('test'))
)
AND M.MSGTIMEUTC >= 1343651965 AND M.MSGTIMEUTC <= 1344170365;
또는
SELECT M1.ATTACHMENTCOUNT AS ATCH_COUNT
FROM mailmessage AS M1
INNER JOIN mailmessage AS M2 ON M1.id = M2.id
WHERE (M1.MSGTIMEUTC >= 1343651965 AND M1.MSGTIMEUTC <= 1344170365)
AND (MATCH (M2.BODY,M2.SUBJECT) AGAINST ('test'))
두 쿼리
나를 하나의 인덱스 사용 (전체 텍스트)그래서 나는 날짜별로 programmaticaly 라인을 필터링 끝낼 수 있습니다 ...하지만 내가 선호하는 것 (관련 보여줍니다 계획을 설명 볼륨) 데이터베이스 솔루션
어떤 생각?
첫 번째 검색어에 대해 'EXPLAIN' 결과를 표시 할 수 있습니까? – raina77ow
첫 번째 쿼리에 대한 결과가 더 설명되어 있습니다. –