Rumah > pangkalan data > tutorial mysql > JOIN lwn WHERE: Manakah yang Lebih Pantas untuk Pertanyaan Berbilang Jadual?

JOIN lwn WHERE: Manakah yang Lebih Pantas untuk Pertanyaan Berbilang Jadual?

Patricia Arquette
Lepaskan: 2025-01-03 02:21:38
asal
207 orang telah melayarinya

JOIN vs. WHERE: Which is Faster for Multi-Table Queries?

SERTAI vs WHERE untuk Prestasi Pertanyaan Optimum

Apabila mendapatkan semula data daripada berbilang jadual dalam pangkalan data, adalah perkara biasa untuk menggunakan sama ada JOIN atau klausa WHERE untuk mewujudkan hubungan antara mereka. Artikel ini menyelidiki perbahasan sama ada satu kaedah sememangnya lebih pantas daripada yang lain.

Soalannya:

Pertimbangkan jadual pangkalan data berikut, yang mewakili dokumen dan statistik yang berkaitan dengannya :

CREATE TABLE Document (
  Id INT PRIMARY KEY,
  Name VARCHAR 255
)

CREATE TABLE DocumentStats (
  Id INT PRIMARY KEY,
  DocumentId INT, -- this is a foreign key to table Document
  NbViews INT
)
Salin selepas log masuk

Untuk mendapatkan semula senarai dokumen yang telah menerima lebih 500 paparan, dua pilihan pertanyaan timbul:

SELECT *
FROM Document, DocumentStats
WHERE DocumentStats.Id = Document.Id
AND DocumentStats.NbViews > 500
Salin selepas log masuk
SELECT *
FROM Document
INNER JOIN DocumentStats ON Document.Id = DocumentStats.Id
WHERE DocumentStats.NbViews > 500
Salin selepas log masuk

Jawapannya:

Secara teorinya, kedua-dua pertanyaan harus menghasilkan hasil yang setara, kerana mereka menggunakan keadaan kesamaan yang sama untuk mewujudkan hubungan antara meja-meja itu. Pengoptimum pangkalan data moden boleh mengendalikan kedua-dua format dengan berkesan.

Walau bagaimanapun, sesetengah enjin pangkalan data, seperti versi SQL Server yang lebih lama, mungkin mempamerkan perbezaan prestasi dalam keadaan tertentu. Dalam contoh yang diberikan, JOIN mungkin lebih baik jika saiz jadual agak besar, kerana ia mengelakkan keperluan untuk produk Cartesian antara kedua-dua jadual.

Sebaliknya, klausa WHERE dengan kesamaan eksplisit keadaan mungkin berprestasi lebih baik jika terdapat indeks unik pada lajur DocumentStats.DocumentId.

Tambahan Pertimbangan:

Adalah sentiasa disyorkan untuk menguji kedua-dua pilihan pertanyaan pada sistem pangkalan data sebenar yang digunakan untuk menentukan pelan pelaksanaan yang optimum. Enjin pangkalan data dan pengoptimum pertanyaan yang berbeza boleh bertindak secara berbeza dalam senario yang berbeza-beza.

Selain itu, pemilihan JOIN over WHERE juga boleh dipengaruhi oleh faktor seperti selektiviti data, struktur jadual dan kehadiran syarat tambahan dalam pertanyaan .

Atas ialah kandungan terperinci JOIN lwn WHERE: Manakah yang Lebih Pantas untuk Pertanyaan Berbilang Jadual?. 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