2010-01-15 2 views
1

상당한 수의 인덱스가있는 테이블 (InnoDB)이 있습니다. 이 중 하나 (또는 ​​그 이상)가 실제로 사용되지 않았다는 것을 아는 것은 좋을 것입니다. 디스크 공간에 대해서는별로 신경 쓰지 않지만 삽입 속도가 문제가되는 경우가 있습니다.MySQL은 인덱스 사용 빈도를 기록합니까?

MySQL은 쿼리를 실행할 때 각 인덱스를 얼마나 자주 사용했는지에 대한 통계를 기록합니까?

답변

0

MySQL에 대한 작은 패치로 사용하지 않는 색인을 찾으려면 way이 있습니다.

+0

직선, 아마도 "작음"? 그것은 4000 라인이며, 렉서 (lexer)를 포함하여 수십개의 소스 파일에 닿습니다! 그러나 그것은 내가 원하는 것을 정확하게 수행한다고 주장합니다. :-) – Ken

0

AFAIK, 인덱스 사용의 총 횟수 만 기록합니다.

SHOW STATUS;Select_scan입니다.

0

프로파일 링을 켜고 병목 현상 분석을하는 것이 좋습니다.

set profiling=1; 

그런 다음 몇 가지 무거운 쿼리를 잠시 실행하도록 할 수 있습니다. 결과적으로 실행을 중지하고 실행 된 쿼리를 조사하여 실행 시간이 가장 긴 쿼리를 확인하는 것보다 좋습니다. 사용하지 않는 인덱스를보고 싶은 마지막 경우

show profiles; 

select sum(duration) from information_schema.profiling where query_id=<ID you want to look at>; 

show profile for query <you want to look at>; 

당신은 userstats이 돈 쿼리

SELECT DISTINCT s.TABLE_SCHEMA, s.TABLE_NAME, s.INDEX_NAME 
FROM information_schema.statistics `s` LEFT JOIN information_schema.index_statistics INDXS 
ON (s.TABLE_SCHEMA = INDXS.TABLE_SCHEMA AND 
s.TABLE_NAME=INDXS.TABLE_NAME AND 
s.INDEX_NAME=INDXS.INDEX_NAME) 
WHERE INDXS.TABLE_SCHEMA IS NULL; 
0

계획을 사용할 수 있습니다 : 당신이주의하는 것이 어떤

일부 다른 명령이 표시되지 않는 경우입니다 많이 변하지 않습니다 - 0 초의 임계 값으로 (느린) 쿼리 로깅을 켠 다음 원하는 언어로 코드를 작성하여 로그 파일을 구문 분석하고 쿼리에서 모든 리터럴을 제거한 다음 계획을 설명하십시오 더 많은 'N'번 실행 된 쿼리.

C.