Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengoptimumkan COUNT(*) Pertanyaan pada Jadual InnoDB untuk Peningkatan Prestasi?

Bagaimana untuk Mengoptimumkan COUNT(*) Pertanyaan pada Jadual InnoDB untuk Peningkatan Prestasi?

DDD
DDDasal
2024-11-02 03:14:02419semak imbas

How to Optimize COUNT(*) Queries on InnoDB Tables for Improved Performance?

Peningkatan Prestasi COUNT(*) pada InnoDB Menggunakan Indeks

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:

  • Sendiri: Mengelakkan keperluan untuk skrip luaran atau pengurusan baris gilir.
  • Sesuai: Kekerapan kemas kini boleh disesuaikan berdasarkan kesegaran kiraan yang diingini.
  • Pemerolehan Kiraan Cekap: Dengan mendapatkan semula kiraan daripada jadual statistik dan bukannya melakukan pertanyaan COUNT(*) langsung, prestasi meningkat dengan ketara.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn