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

DDD
Lepaskan: 2024-11-02 03:14:02
asal
333 orang telah melayarinya

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!