2010-01-15 17 views
1

我有一個表(InnoDB)有相當數量的指數。知道這些中的一個(或多個)是否從未被實際使用過,這將是非常好的。我不太關心磁盤空間,但插入速度有時是一個問題。MySQL是否記錄使用索引的頻率?

MySQL是否記錄運行查詢時使用每個索引的頻率的統計信息?

回答

0

有一個way找到一個小的補丁到MySQL的未使用的索引。

+0

簡單,或許,但「小」?它長達4000行,觸及數十個源文件,包括詞法分析器!但它聲稱做我想要的東西,所以很好找。 :-) – Ken 2010-01-15 21:41:33

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.