기본 키가 id 인 연락처 테이블이 있습니다. 또한 보조 색인 idx_id_del_user (id, deleted, user_id)가 있습니다.in 절이있는 인덱스가 인덱스를 사용하지 않습니다.
다음 쿼리는 인덱스를 사용하기 때문에 매우 빠르고 - 0.0098s
에서
select id
from jts_contacts
where id = '00000402-25c8-7375-e3df-4ec5b66de11d'
and deleted = 0;
1 행 페치 내가 절에서 사용하는 경우에는 외부 쿼리가 전체 테이블 스캔에 간다. 기본 키 또는 idx_id_del_user 중 하나를 사용하려고합니다. 9S
에서 가져온
select *
from jts_contacts FORCE INDEX (idx_id_del_user)
where id in
(select id
from jts_contacts
where id = '00000402-25c8-7375-e3df-4ec5b66de11d')
and deleted = 0
1 행 계획을 설명 -
id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
------------------------------------------------------------------------------------
1, 'PRIMARY', 'jts_contacts', 'ALL', '', '', '', '', 1127275, 'Using where'
2, 'DEPENDENT SUBQUERY', 'jts_contacts', 'const', 'PRIMARY,idx_id_del_user', 'PRIMARY', '108', 'const', 1, 'Using index'
이 표는 120 만 개 기록을 가지고 있으며, 테이블 분석 하였다. FORCE INDEX 옵션없이 시도했지만 인덱스를 사용하고 있지 않습니다. 이 쿼리를 더 빠르게 만드는 방법에 대한 제안 사항은 무엇입니까?
경고 : 조인을 대신 절에이은 기존 제품에서 생성 된 쿼리입니다 그러나 때문에, 작동 사용 -이 조인 사용 변경할 수 없습니다.
감사합니다. 나는 그것을 또한 시험해 보았다. 그러나 삭제 된 것은 두 개의 0과 1 (매우 선택적은 아닙니다)입니다. 실제로 응답 시간은 12 초로 늘어납니다. 나는 대답에 동의하지만 삭제 된 색인은 매우 선택 적이기 때문에 작동하지 않습니다. – user1112552