2009-10-23 6 views
4

나는 내가 잘못하고있는 것을 알아 내려고하고있다. 이 쿼리는 오랫동안 길을 걷고있는 것처럼 인덱스를 사용하지 않는 것 같습니다.MySQL - 색인을 사용하지 않음

실행할 때 :

Explain SELECT a, b, c, d FROM `table` WHERE d = 4013456 

id  select_type  table  type possible_keys  key  key_len  ref  rows Extra` 
1  SIMPLE   table  ALL  d     NULL NULL  NULL 79787 Using where` 
index: 
d INDEX  79787 

은 내가 잘못 뭔가가 있나요? 설명 내부의 쿼리가 10 초 걸립니다. 마치 1 초 미만으로 걸리는 것처럼 보입니다.

감사합니다.

+1

'SHOW CREATE TABLE yourtablename;'의 결과는 무엇입니까? – Asaph

+1

은 문자열 또는 숫자입니까? – northpole

+1

내가 시도해 볼 때, 저에게 create table exec의 작은 스 니펫을 보여 주며, 내 서버에서 (전체 디버그를위한) 옵션이 켜져 있다고 생각하지 않습니다. – Petrogad

답변

7

dvarchar (주석에서 언급 했음)이며 where 절에 정수가 있기 때문에 색인을 사용하지 않는 이유가 있습니다. 쿼리를 다음과 같이 변경하는 경우 :

SELECT a, b, c, d FROM `table` WHERE d = '4013456'; 

인덱스를 사용할 가능성이 더 높습니다. 그러나 더 나은 해결책은 열을 정수로 변경하고 쿼리를 단독으로 두는 것입니다 (다른 상황에서 가능하다면).

+0

잘 모르겠습니다. 바보처럼 느껴지지 않습니다. – Petrogad

+1

괜찮 으면, 얼마나 자주이 문제에 빠지게 될지 놀라실 것입니다. 많은 프로그래머들은 따옴표를 사용하지 않기로 한 결과를 알지 못합니다. – northpole

2

d가 varchar 인 경우 따옴표로 묶어야합니다. 따옴표를 그대로두면 색인이 제대로 사용되지 않습니다.

관련 문제