Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mempercepatkan Pengiraan Baris dalam MySQL untuk Peningkatan Prestasi?

Bagaimanakah Saya Boleh Mempercepatkan Pengiraan Baris dalam MySQL untuk Peningkatan Prestasi?

Mary-Kate Olsen
Lepaskan: 2024-12-26 01:19:10
asal
989 orang telah melayarinya

How Can I Speed Up Row Counting in MySQL for Improved Performance?

Mempercepatkan Pengiraan Baris dalam MySQL untuk Keputusan Pantas

Mengira baris dalam jadual MySQL yang besar boleh menjadi tugas yang memakan masa. Ini benar terutamanya apabila jadual mengandungi berjuta-juta baris. Pertanyaan SELECT COUNT(*) standard boleh mengambil masa beberapa saat untuk diselesaikan, yang boleh menjadi kesesakan prestasi yang ketara.

Mengapa Indeks Mungkin Tidak Membantu

Menambahkan indeks pada lajur yang diindeks selalunya boleh meningkatkan prestasi pertanyaan. Walau bagaimanapun, dalam kes mengira baris, indeks mungkin tidak memberikan faedah yang ketara. Ini kerana pertanyaan masih perlu mengimbas setiap baris dalam jadual untuk menentukan kiraan baris.

Teknik Alternatif

Selain daripada menyimpan cache atau mengemas kini maklumat ringkasan, terdapat teknik terhad untuk mempercepatkan pertanyaan pengiraan baris. Satu penyelesaian yang berpotensi ialah menggunakan enjin storan berasaskan lajur, seperti Apache Parket. Enjin berasaskan lajur direka untuk pertanyaan analitikal dan boleh menjadi lebih pantas untuk jenis pertanyaan tertentu, termasuk pengiraan baris. Walau bagaimanapun, enjin berasaskan lajur mungkin tidak sesuai untuk semua kes penggunaan dan mungkin mempunyai kelemahan untuk jenis pertanyaan lain.

Jadual Ringkasan Berasaskan Pencetus

Cara yang paling berkesan untuk mempercepatkan pertanyaan pengiraan baris adalah dengan mengekalkan jadual ringkasan. Jadual ringkasan ini boleh menyimpan kiraan baris untuk setiap nilai yang mungkin bagi lajur yang diindeks. Apabila baris disisipkan, dipadamkan atau dikemas kini, pencetus boleh mengemas kini jadual ringkasan dengan sewajarnya. Pendekatan ini boleh memberikan pertanyaan kiraan baris yang hampir serta-merta, tanpa mengira saiz jadual.

Berikut ialah contoh jadual ringkasan berasaskan pencetus:

CREATE TABLE books_cnt (
  status VARCHAR(255) NOT NULL,
  total INT NOT NULL
);

CREATE TRIGGER ai_books AFTER INSERT ON books
FOR EACH ROW UPDATE books_cnt SET total = total + 1 WHERE status = NEW.status;

CREATE TRIGGER ad_books AFTER DELETE ON books
FOR EACH ROW UPDATE books_cnt SET total = total - 1 WHERE status = OLD.status;

CREATE TRIGGER au_books AFTER UPDATE ON books
FOR EACH ROW
BEGIN
  IF (OLD.status <> NEW.status)
  THEN
    UPDATE books_cnt SET total = total + IF(status = NEW.status, 1, -1) WHERE status IN (OLD.status, NEW.status);
  END IF;
END;
Salin selepas log masuk

Dengan menggunakan pencetus ini -berasaskan jadual ringkasan, anda boleh mendapatkan semula kiraan baris untuk setiap nilai status dengan pertanyaan mudah:

SELECT status, total FROM books_cnt;
Salin selepas log masuk

Ini pertanyaan akan mengembalikan hasil serta-merta, walaupun untuk jadual besar.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mempercepatkan Pengiraan Baris dalam MySQL 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan