Rumah > Artikel > pangkalan data > Bagaimana untuk Mengoptimumkan COUNT(*) Pertanyaan pada Jadual InnoDB untuk Peningkatan Prestasi?
Masalah:
Mengira baris dalam jadual InnoDB yang luas dengan lebih kurang 9 juta rekod melalui COUNT(*) atau COUNT(id) menimbulkan cabaran prestasi yang ketara, mengambil masa lebih daripada 6 saat untuk dilaksanakan.
Percubaan Pengoptimuman Awal:
Merujuk sumber luaran, ia telah dicadangkan bahawa memaksa InnoDB menggunakan indeks akan mengurangkan isu ini. Walau bagaimanapun, melaksanakan "SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY)" tidak menghasilkan peningkatan prestasi.
Penyelesaian Alternatif:
MySQL 5.1.6 dan versi yang lebih baru sediakan penyelesaian yang mantap:
1. Cipta Jadual Statistik:
Buat jadual khusus bernama "statistik" untuk menyimpan kiraan baris:
CREATE TABLE stats (`key` varchar(50) NOT NULL PRIMARY KEY, `value` varchar(100) NOT NULL);
2. Jadualkan Acara:
Sediakan acara bernama "update_stats" menggunakan Penjadual Acara MySQL untuk mengemas kini jadual statistik secara berkala dengan kiraan baris:
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);
Faedah:
Penyelesaian ini menawarkan beberapa kelebihan:
Atas ialah kandungan terperinci Bagaimana untuk Mengoptimumkan COUNT(*) Pertanyaan pada Jadual InnoDB untuk Peningkatan Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!