使用索引優化 InnoDB 上的 COUNT(*) 效能
對大型 InnoDB 表中的記錄進行計數可能是效能瓶頸。預設方法 COUNT(*) 可能很慢,特別是對於具有數百萬筆記錄的大型表。 提高效能的一種技術是強制 InnoDB 使用索引進行計數操作。如同問題中所提到的,使用語句 SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY);可能看起來是個合乎邏輯的方法。然而,這種方法已被證明成功有限。替代解決方案:事件調度程序和統計表
從 MySQL 版本 5.1.6 開始,替代解決方案出現了。此方法利用事件排程器和統計表來定期更新和儲存記錄計數。建立統計表:建立一個名為的表stats 儲存計數資訊。
CREATE TABLE stats ( `key` varchar(50) NOT NULL PRIMARY KEY, `value` varchar(100) NOT NULL );
建立事件:設定一個名為update_stats 的事件,每5 分鐘自動更新一次統計表(或以所需的時間間隔)。
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中文網其他相關文章!