2012-06-10 2 views
0

나는 간단한 select id from mytable limit 1;을 수행하고있는 MyISAM 테이블을 가지고 있습니다. 이것은 단지 시스템을 얼려 버린다.mysql 인덱스가 쿼리를 최적화하지 않습니다

나는 explain select id from mytable limit 1;을 시도했다. 다시 그것은 내 시스템을 얼려 버린다. 테이블 인구 통계 : 50k 레코드, 10mbs 크기, 2 개의 인덱스 (기본 키 자동 증가), 8 개의 컬럼.

explain 문이 실패한 이유는 쿼리 계획을 표시하기로되어 있기 때문입니다. 테이블 크기가 엄청나거나 레코드 수가 많지 않은데 왜 mysql이 느리게 작동합니까? 오히려, 나는 무엇을 여기에서 놓치고 있냐?

+1

제쳐두고 : 귀하의 질문은 무엇입니까? 결과는 'ORDER BY' 절없이 불확실합니다. – eggyal

+0

@eggyal'id by order by order '를 만들 수 있습니다. 그러나이 쿼리는 너무 동결됩니다. 다른 테이블에 100 개의 레코드 만 있으면 작동합니다. – jerrymouse

+1

하나의 연결이 그런 고정 된 쿼리를 실행하는 동안, 'SHOW PROCESSLIST'에서 다른 연결이 그 연결에 대해 무엇을 보여줍니까? – eggyal

답변

0

mytable에서 대기 상태였습니다. eggyal은 내게 show processlist을 사용하는 단서를주었습니다. 예상대로 문 작품을 설명 지금

+-----+---------+-----------------+----------------+---------+------+---------------------------------+----------------------------------------------------+ 
| Id | User | Host   | db    | Command | Time | State       | Info            | 
+-----+---------+-----------------+----------------+---------+------+---------------------------------+----------------------------------------------------+ 
| 349 | root | localhost:56612 | mydb   | Query | 3582 | Waiting for table metadata lock | ALTER TABLE `mytable` ADD INDEX(`fk_to_02`) | 

내가 그 대기 체인을 종료하는 kill 349을 심어 : 그것은 나타났다.

관련 문제