2011-09-01 7 views
0

이 쿼리는 MyISAM 테이블 반대 영원히 복용 : 나는 계산 합격을하지 못한다면, 지금mysql을 : 쿼리가 어떤 결과

SELECT * FROM table 
      WHERE link_id = 1 and counted = 1 

은 정말 빨리 가져옵니다. 내가 그것에 합격하면 영원히 걸립니다. 그것은 큰 테이블이지만, 빈 테이블을 보여주기보다는 막혀 있어야하는 이유를 알지 못합니다.

아이디어가 있으십니까?

+1

색인을 생성 한 열은 무엇입니까? –

+0

(있는 경우) 어떤 인덱스가'table'에 있습니까? –

+1

테이블에 대한 create 문을 게시하십시오. – Poodlehat

답변

0

각 행마다 counted=1을 필터링해야하기 때문입니다. 색인이 link_id에 설정되어 있습니까? 그렇다면 counted을 설정하면됩니다.

+0

하지만 어쨌든 많은 행을 반복 할 필요가 없습니까? (사후 쿼리 작업이 없습니다.) –

1

테이블을 실행하여 적절한 색인이 있는지 확인하십시오. 아마도 계수에는 색인이 없을 것입니까?

EXPLAIN SELECT * FROM table WHERE link_id = 1 and counted = 1 
+0

이것은 내가 얻는 것입니다. id : 1, select type : SIMPLE, 테이블 : \t type : ref, possible_keys : IX_2, IX_1, IX_3, key : IX_1, key_len : 4 , 심판 : const, 행 : 33333, 추가 : using where – luqita

0

내 생각에 단순히 색인이 누락되었습니다. 이 시도 :

SHOW INDEXES FROM <your table name> 

당신이 column_name 분야에서 counted를 볼 수 있나요?

CREATE INDEX <nifty index name> ON <your table name> (counted); 

나는 다음 (미가 here을 설명하는) EXPLAIN에 보일 것이다

하지 않으면, 당신은 아마 싶습니다. (내 경험으로 대부분의 경우 질의가 느린 경우 문제가 단순히 누락 된 색인 일 뿐이므로 설명하는 것이 좋습니다.)

1

(link_id, 계산 됨)에 대한 색인은 해당 쿼리를 빠르게 만듭니다.

관련 문제