我有一個資料庫“代數”,其中有一個包含 1,033,990 行的“問題”表。這些記錄有一個屬性“已解決”,即 INT。我有一個簡單的查詢
select count(*) from questions where solved = 0
我有兩台具有相似 CPU 的伺服器。兩台伺服器上的表是相同的。 (資料庫是生產的副本)。它們位於 SSD 上。一台伺服器具有 MySQL 5.5.49 的 Ubuntu 14.04,另一台伺服器具有帶有 MySQL 5.7.12 的 Ubuntu 16.04。
問題是這個查詢在 MySQL 5.5 上只花了 0.009s,但在 MySQL 5.7 上花了 0.304s。慢了 34 倍!
查詢計劃大致相似:
伺服器速度慢:
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE questions NULL index NULL by_topic_solved 97 NULL 1033990 10.00 Using where; Using index
快速伺服器:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE questions index NULL by_topic_solved 97 NULL 1033989 Using where; Using index
為什麼會出現這種情況讓我感到困惑。我在這個新的 5.7 設定中看到了其他更複雜的效能問題,但這是在底層查詢方面要解決的最簡單的問題。
我正在努力尋找對此的解釋或從哪裡開始。 my.cnf 兩者大致相似。任何建議將不勝感激。
答案1
這個問題我已經完全明白了。改變的是,在新的mysql中,由於query_cache_type = OFF的預設設置,查詢快取被禁用。當我透過設定 query_cache_type=1 重新啟用查詢快取時,立即恢復了更好的效能。由於我的網站使用的 SELECT 查詢比 INSERT/UPDATE 查詢多 100 倍,因此使用查詢快取對我來說很有意義。感謝您指出我朝這個方向看!