Rumah > pangkalan data > tutorial mysql > Bagaimanakah Kami Boleh Mengoptimumkan Prestasi Pertanyaan dengan Mengurangkan Kiraan Sertaan?

Bagaimanakah Kami Boleh Mengoptimumkan Prestasi Pertanyaan dengan Mengurangkan Kiraan Sertaan?

Barbara Streisand
Lepaskan: 2024-12-08 21:40:11
asal
292 orang telah melayarinya

How Can We Optimize Query Performance by Reducing Join Count?

Mengurangkan Kiraan Sertaan untuk Prestasi Pertanyaan Dioptimumkan

Dalam pengoptimuman pangkalan data, meminimumkan operasi gabungan adalah penting untuk meningkatkan kelajuan pertanyaan. Prinsip ini menentukan bahawa setiap gabungan menggandakan kos pertanyaan dan bukannya hanya menambahnya. Untuk menggambarkan konsep ini, mari kita selidiki masalah khusus dan teroka penyelesaian alternatif yang menggunakan lebih sedikit penyertaan.

Pertanyaan untuk Mengira Keputusan Sertaan

Pertimbangkan senario yang anda perlukan untuk mengira bilangan baris yang terhasil daripada tiga baris yang berasingan menyertai:

  • album ke pays_album
  • album ke pers_album
  • album ke juron_album

Lazimnya, pendekatan subquery , masing-masing melakukan gabungan dan a count:

-- Subquery 1
SELECT COUNT(*)
FROM album alb
LEFT JOIN pays_album payalb USING ( idAlb )
WHERE alb.titreAlb = "LES CIGARES DU PHARAON"

-- Subquery 2
SELECT COUNT(*)
FROM album alb
LEFT JOIN pers_album peralb USING ( idAlb )
WHERE alb.titreAlb = "LES CIGARES DU PHARAON"

-- Subquery 3
SELECT COUNT(*)
FROM album alb
LEFT JOIN juron_album juralb USING ( idAlb )
WHERE alb.titreAlb = "LES CIGARES DU PHARAON"
Salin selepas log masuk

Walau bagaimanapun, adalah mungkin untuk mencapai hasil yang sama dengan satu pertanyaan:

SELECT alb.titreAlb AS "Titre",
       COUNT(DISTINCT payalb.idAlb, payalb.PrimaryKeyFields) AS "Pays",
       COUNT(DISTINCT peralb.idAlb, peralb.PrimaryKeyFields) AS "Personnages",
       COUNT(DISTINCT juralb.idAlb, juralb.PrimaryKeyFields) AS "Jurons"
FROM album alb
LEFT JOIN pays_album payalb USING ( idAlb )
LEFT JOIN pers_album peralb USING ( idAlb )
LEFT JOIN juron_album juralb USING ( idAlb )
WHERE alb.titreAlb = "LES CIGARES DU PHARAON"
GROUP BY alb.titreAlb
Salin selepas log masuk

Dengan menggunakan kata kunci DISTINCT, kesan gabungan tambahan pada kiraan adalah dinafikan. Pendekatan ini secara berkesan meniru tanggapan asal untuk meminimumkan cantuman, walaupun kelebihan prestasinya bergantung pada ketersediaan indeks yang optimum. Walau bagaimanapun, ia menyediakan alternatif yang berdaya maju bernilai pertimbangan.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengoptimumkan Prestasi Pertanyaan dengan Mengurangkan Kiraan Sertaan?. 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