我有一個非常簡單的表,用於在成員配置文件上記錄訪問,具有多列鍵(member_id,visitor_id,month_visited)和更精確的日期。 month_visited是一個類似CHAR(7)的列:'2013-10'Mysql沒有在哪裏使用索引
每個新月,我想在另一個表中壓縮上個月的數據,然後刪除它。
我的要求很簡單:
DELETE FROM visits WHERE month_visited = '2013-10'
它需要年齡刪除這些行,就像我的專用服務器上幾分鐘。當我查詢簡單的SELECT COUNT(*) FROM visits
時也是如此。
我有2013-10的180萬條目。
但它需要時間。當我嘗試
EXPLAIN SELECT * FROM visits WHERE month_visited = "2013-10"
它告訴我:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE visits ref idx_month_visited idx_month_visited 21 const 1782148 Using where
「使用,其中」,嚴重?
編輯:對不起,我忘了指定,我還增加了指數只是month_visited列:)(如EXPLAIN顯示,實際上,但它不使用它...)
我怎麼能改善這些(顯然)簡單的查詢?我是MySQL的noob,但我不認爲這是很正常的,它需要幾分鐘時間來執行這些查詢。
感謝您的任何意見!如果第一關鍵部件均在條件中使用
此致
這張表有多少行? –
我在問,因爲在我有限的體驗中,當沒有使用索引時,它通常是因爲使用它並沒有什麼幫助;也就是說,與全表掃描相比,它不會節省太多時間(當索引的基數很低時,這往往會發生) –
另外,刪除是一個「寫」操作。索引優化讀操作,代價是寫操作更加昂貴(因爲寫操作時索引重建)。所以,你有一些複雜的指數這一事實並沒有幫助,但會加重問題。 –