Rumah >pangkalan data >tutorial mysql >SERTAI DALAM lwn. SERTAI KIRI: Bilakah Satu Lebih Cepat Daripada Yang Lain?

SERTAI DALAM lwn. SERTAI KIRI: Bilakah Satu Lebih Cepat Daripada Yang Lain?

Barbara Streisand
Barbara Streisandasal
2025-01-18 16:33:14980semak imbas

INNER JOIN vs. LEFT JOIN: When is One Significantly Faster Than the Other?

Penjelasan terperinci tentang perbezaan prestasi antara INNER JOIN dan LEFT JOIN dalam SQL Server

Dalam SQL Server, pertimbangan prestasi selalunya menjadi kunci kepada keputusan pengoptimuman pertanyaan. Memilih antara INNER JOIN atau LEFT JOIN, terutamanya dalam pertanyaan yang melibatkan berbilang jadual, adalah soalan biasa. Walaupun orang sering berfikir bahawa LEFT JOIN sememangnya lebih pantas, ini tidak selalunya benar.

Mengapa LEFT JOIN biasanya tidak lebih pantas?

LEFT JOIN akan mendapatkan semula semua baris dalam jadual kiri, walaupun tiada baris yang sepadan dalam jadual kanan. Sebaliknya, INNER JOIN hanya mengembalikan baris yang padanan ditemui. Ini bermakna LEFT JOIN itu sendiri akan melakukan lebih banyak kerja dan menjana lebih banyak baris hasil, yang boleh mengakibatkan masa pelaksanaan yang lebih lama.

Pengecualian: Bilakah LEFT JOIN boleh menjadi lebih pantas?

Dalam kes yang jarang berlaku, LEFT JOIN mungkin lebih cepat daripada INNER JOIN kerana faktor-faktor tertentu adalah seperti berikut:

  • Jadual Sangat Kecil: Apabila jadual yang terlibat sangat kecil (mis., kurang daripada sepuluh baris), overhed padanan cincang (digunakan oleh INNER JOIN) mungkin melebihi gelung bersarang (digunakan oleh LEFT JOIN ) kos.
  • Kekurangan indeks yang mencukupi: Jika jadual tidak mempunyai indeks yang sesuai untuk menyokong INNER JOIN, SQL Server mungkin memilih pelan pelaksanaan yang kurang cekap, menyebabkan pertanyaan yang lebih perlahan. Dalam kes ini, gelung bersarang menggunakan LEFT JOIN mungkin lebih baik.

Contoh

Pertimbangkan contoh berikut:

<code class="language-sql">CREATE TABLE #Test1 (ID int NOT NULL PRIMARY KEY, Name varchar(50) NOT NULL)
INSERT INTO #Test1 (ID, Name) VALUES (1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four'), (5, 'Five')

CREATE TABLE #Test2 (ID int NOT NULL PRIMARY KEY, Name varchar(50) NOT NULL)
INSERT INTO #Test2 (ID, Name) VALUES (1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four'), (5, 'Five')

SELECT *
FROM #Test1 t1
INNER JOIN #Test2 t2
ON t2.Name = t1.Name

SELECT *
FROM #Test1 t1
LEFT JOIN #Test2 t2
ON t2.Name = t1.Name

DROP TABLE #Test1
DROP TABLE #Test2</code>

Apabila dilaksanakan pada jadual kecil ini, pertanyaan LEFT JOIN adalah lebih pantas sedikit kerana overhed padanan cincang melebihi kos saiz hasil tambahan. Walau bagaimanapun, pada jadual yang lebih besar dengan lebih daripada sepuluh baris, pertanyaan INNER JOIN adalah lebih pantas.

Kesimpulan

Dalam kebanyakan kes, INNER JOIN berprestasi lebih baik daripada LEFT JOIN dari segi kelajuan pelaksanaan. Pengecualian terhad kepada keadaan yang sangat khusus yang melibatkan jadual yang sangat kecil dan indeks yang tidak mencukupi. Oleh itu, adalah penting untuk memeriksa reka bentuk pertanyaan dan indeks dengan teliti untuk mengenal pasti kesesakan prestasi yang berpotensi, dan bukannya menggantikan PENYERTAAN DALAM dengan PENYERTAAN KIRI hanya atas sebab prestasi.

Atas ialah kandungan terperinci SERTAI DALAM lwn. SERTAI KIRI: Bilakah Satu Lebih Cepat Daripada Yang Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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