問題:
計算一個大約有9 的巨大InnoDB中的行數透過COUNT(*) 或COUNT(id) 計算百萬筆記錄帶來了重大的效能挑戰,執行時間長達6 秒。
初始最佳化嘗試:
引用外部來源,它有人建議強制 InnoDB 使用索引可以緩解這個問題。然而,實作「SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY)」並沒有帶來效能提升。
替代解決方案:
MySQL 5.1.6 及更高版本提供強大的解決方案:
1.建立統計表:
建立一個名為「stats」的專用表來儲存行數:
CREATE TABLE stats (`key` varchar(50) NOT NULL PRIMARY KEY, `value` varchar(100) NOT NULL);
2.安排事件:
使用MySQL 的事件調度程式設定一個名為「update_stats」的事件,以定期更新統計表的行數:
CREATE EVENT update_stats ON SCHEDULE EVERY 5 MINUTE DO INSERT INTO stats (`key`, `value`) VALUES ('data_count', (select count(id) from data)) ON DUPLICATE KEY UPDATE value=VALUES(value);
好處:
此解決方案有多個優點:
以上是如何最佳化 InnoDB 表上的 COUNT(*) 查詢以提高效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!