Rumah > pangkalan data > tutorial mysql > Mengapakah COUNT(*) Sangat Lambat dalam SQL Server, dan Bagaimana Saya Boleh Mempercepatkannya?

Mengapakah COUNT(*) Sangat Lambat dalam SQL Server, dan Bagaimana Saya Boleh Mempercepatkannya?

Barbara Streisand
Lepaskan: 2024-12-26 04:04:09
asal
929 orang telah melayarinya

Why is COUNT(*) So Slow in SQL Server, and How Can I Speed It Up?

Memahami Prestasi SQL(*)

Pertimbangkan pertanyaan yang melaksanakan operasi kiraan pada jadual dengan lebih 20 juta baris. Masa pelaksanaan berbeza dengan ketara bergantung pada ungkapan kiraan, dengan kelewatan yang ketara untuk ungkapan yang memerlukan perbandingan (cth., count(*) = 1).

Punca Pelaksanaan Lambat

Penjelasan untuk perbezaan prestasi ini terletak pada teknik pengoptimuman yang digunakan oleh SQL Server. Untuk pertanyaan pertama (count() = 0), pelayan mengoptimumkannya untuk menyemak kehadiran mana-mana baris (wujud(pilih daripada BookChapters)) dan bukannya mengiranya.

Dalam Sebaliknya, untuk pertanyaan lain (count() = 1 atau count() > 1), SQL Server menggunakan indeks bukan berkelompok untuk mengira baris. Walau bagaimanapun, memandangkan jadual dalam kes ini tidak mempunyai sebarang indeks bukan berkelompok, pelayan mesti mengimbas keseluruhan jadual, menghasilkan masa pelaksanaan yang banyak.

Peningkatan Prestasi

Kepada meningkatkan prestasi kiraan(*) pertanyaan:

  • Gunakan Pertanyaan Dioptimumkan: Lebih suka semakan kewujudan (jika wujud(pilih daripada BookChapters)) dan bukannya perbandingan (jika dikira() = 0).
  • Buat Indeks Tidak Berkelompok : Memperkenalkan indeks tidak berkelompok pada lajur yang sesuai untuk meningkatkan pengiraan baris kecekapan.

Kaedah Alternatif untuk Kiraan Baris Pantas

  • Jadual Sistem sysindexes: Gunakan jadual sysindexes untuk mendapatkan baris dengan cepat dikira untuk jadual dengan berkelompok indeks.
  • partition spart Rows Sum: Untuk jadual partition, jumlahkan nilai baris daripada sys.partitions table (spart) untuk mendapatkan kiraan baris pantas.
  • ROWS maksimum daripada sysindex: Dalam SQL 2000, dapatkan ROWS maksimum nilai daripada jadual sysindexes untuk menganggarkan kiraan baris semasa (mungkin berbeza-beza bergantung pada kekerapan kemas kini).

Atas ialah kandungan terperinci Mengapakah COUNT(*) Sangat Lambat dalam SQL Server, dan Bagaimana Saya Boleh Mempercepatkannya?. 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