Mysql 5.7 vs 5.5:簡單查詢的運行時間延長了 50 倍

Mysql 5.7 vs 5.5:簡單查詢的運行時間延長了 50 倍

我有一個資料庫“代數”,其中有一個包含 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 倍,因此使用查詢快取對我來說很有意義。感謝您指出我朝這個方向看!

相關內容