Rumah > pangkalan data > tutorial mysql > Mengapakah `IN` lebih perlahan daripada `=` dalam subkueri MySQL?

Mengapakah `IN` lebih perlahan daripada `=` dalam subkueri MySQL?

Patricia Arquette
Lepaskan: 2025-01-16 17:18:12
asal
383 orang telah melayarinya

Why is `IN` slower than `=` in MySQL subqueries?

Sebab mengapa pengendali IN lebih perlahan daripada pengendali = dalam MySQL

Dalam sesetengah kes, syarat IN dalam MySQL dilaksanakan lebih perlahan daripada syarat = Ini adalah isu yang diketahui. Punca utamanya ialah apabila pengoptimum MySQL memproses subkueri dalam keadaan IN, kadangkala ia tersilap mengenal pastinya sebagai subkueri bergantung dan bukannya subkueri bebas.

Oleh itu, subkueri dalam keadaan IN dilaksanakan sekali untuk setiap baris dalam pertanyaan induk, manakala subkueri dalam keadaan = dilaksanakan sekali sahaja. Ini boleh membawa kepada perbezaan prestasi yang ketara, terutamanya apabila bekerja dengan set data yang besar.

Mari kita lihat contoh pertanyaan SELECT:

<code class="language-sql">SELECT *
FROM question_law_version
WHERE law_version IN (SELECT MAX(foo_id) FROM bar);</code>
Salin selepas log masuk

Menggunakan EXPLAIN untuk menganalisis pertanyaan ini, hasilnya mungkin kelihatan seperti ini:

<code>1  'PRIMARY'             'question_law_version'  'ALL'  ''  ''  ''  ''  10148  'Using where'
2  'DEPENDENT SUBQUERY'  'question_law_version'  'ALL'  ''  ''  ''  ''  10148  'Using where'
3  'DEPENDENT SUBQUERY'  'question_law'          'ALL'  ''  ''  ''  ''  10040  'Using where'</code>
Salin selepas log masuk
Baris

"DEPENDENT SUBQUERY" menunjukkan bahawa subquery dalam keadaan IN sedang dilaksanakan untuk setiap baris pertanyaan induk.

Jika kita menukar syarat IN kepada =:

<code class="language-sql">SELECT *
FROM question_law_version
WHERE law_version = (SELECT MAX(foo_id) FROM bar);</code>
Salin selepas log masuk
Keluaran

EXPLAIN akan menjadi:

<code>1  'PRIMARY'   'question_law_version'  'ALL'  ''  ''  ''  ''  10148  'Using where'
2  'SUBQUERY'  'question_law_version'  'ALL'  ''  ''  ''  ''  10148  'Using where'
3  'SUBQUERY'  'question_law'          'ALL'  ''  ''  ''  ''  10040  'Using where'</code>
Salin selepas log masuk

Baris "SUBQUERY" menunjukkan bahawa subquery kini dilaksanakan sekali sahaja, menghasilkan pelaksanaan yang lebih pantas.

Isu ini telah diselesaikan dalam versi MySQL 5.6.x. Jika boleh, menaik taraf kepada versi MySQL yang lebih baharu boleh menyelesaikan isu ini dan memperoleh peningkatan prestasi.

Atas ialah kandungan terperinci Mengapakah `IN` lebih perlahan daripada `=` dalam subkueri MySQL?. 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