我有一個表(InnoDB)有相當數量的指數。知道這些中的一個(或多個)是否從未被實際使用過,這將是非常好的。我不太關心磁盤空間,但插入速度有時是一個問題。MySQL是否記錄使用索引的頻率?
MySQL是否記錄運行查詢時使用每個索引的頻率的統計信息?
我有一個表(InnoDB)有相當數量的指數。知道這些中的一個(或多個)是否從未被實際使用過,這將是非常好的。我不太關心磁盤空間,但插入速度有時是一個問題。MySQL是否記錄使用索引的頻率?
MySQL是否記錄運行查詢時使用每個索引的頻率的統計信息?
有一個way找到一個小的補丁到MySQL的未使用的索引。
AFAIK,它只記錄索引用法的總數。
SHOW STATUS;
有Select_scan
列。
我建議開啓分析並做一些瓶頸分析。
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秒,然後用您選擇的語言編寫一段代碼來解析日誌文件,並將所有文字刪除查詢,然後解釋計劃對於執行超過'N'次的任何查詢。
C.
簡單,或許,但「小」?它長達4000行,觸及數十個源文件,包括詞法分析器!但它聲稱做我想要的東西,所以很好找。 :-) – Ken 2010-01-15 21:41:33