Rumah  >  Artikel  >  pangkalan data  >  ## Manakah Lebih Pantas dalam MySQL: `LIKE` atau `LOCATE` untuk Padanan Rentetan?

## Manakah Lebih Pantas dalam MySQL: `LIKE` atau `LOCATE` untuk Padanan Rentetan?

Patricia Arquette
Patricia Arquetteasal
2024-10-25 02:36:30610semak imbas

## Which is Faster in MySQL: `LIKE` or `LOCATE` for String Matching?

Yang Mana Lebih Cepat: MySQL LIKE vs LOCATE?

Dalam MySQL, terdapat dua fungsi yang biasa digunakan untuk padanan corak dalam rentetan: LIKE dan LOCATE. Walaupun kedua-dua fungsi boleh digunakan untuk mencari subrentetan dalam rentetan, ia berbeza dalam pendekatan dan ciri prestasinya.

LIKE vs LOCATE

Pengendali LIKE menggunakan kad bebas untuk padankan corak watak. Ia menyokong pelbagai aksara kad bebas, termasuk % (padanan dengan mana-mana bilangan aksara) dan _ (padanan dengan satu aksara). Contohnya:

<code class="sql">SELECT * FROM table WHERE column LIKE '%text%';</code>

Pertanyaan ini mencari semua baris yang nilai lajur mengandungi rentetan "teks" di mana-mana sahaja di dalamnya.

Sebaliknya, fungsi LOCATE mencari kedudukan daripada subrentetan yang ditentukan dalam rentetan. Ia mengembalikan indeks kejadian pertama subrentetan, atau 0 jika subrentetan tidak ditemui. Contohnya:

<code class="sql">SELECT * FROM table WHERE LOCATE('text', column) > 0;</code>

Pertanyaan ini mencari semua baris yang nilai lajur mengandungi subrentetan "teks" di mana-mana sahaja di dalamnya.

Perbandingan Prestasi

Secara amnya, pengendali LIKE adalah sedikit lebih pantas daripada LOCATE. Ini kerana LIKE tidak perlu melakukan perbandingan tambahan untuk menyemak sama ada keputusan lebih besar daripada 0.

Untuk menunjukkan perbezaan prestasi ini, pertimbangkan penanda aras berikut:

<code class="sql">mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar'));
+---------------------------------------------+
| BENCHMARK(100000000,LOCATE('foo','foobar')) |
+---------------------------------------------+
|                                           0 |
+---------------------------------------------+
1 row in set (3.24 sec)

mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar') > 0);
+-------------------------------------------------+
| BENCHMARK(100000000,LOCATE('foo','foobar') > 0) |
+-------------------------------------------------+
|                                               0 |
+-------------------------------------------------+
1 row in set (4.63 sec)


mysql> SELECT BENCHMARK(100000000,'foobar' LIKE '%foo%');
+--------------------------------------------+
| BENCHMARK(100000000,'foobar' LIKE '%foo%') |
+--------------------------------------------+
|                                          0 |
+--------------------------------------------+
1 row in set (4.28 sec)</code>

Sebagaimana hasil penanda aras menunjukkan, LIKE adalah lebih pantas sedikit daripada LOCATE apabila mencari subrentetan dalam rentetan. Walau bagaimanapun, perbezaan dalam prestasi agak kecil untuk kebanyakan kes penggunaan praktikal.

Atas ialah kandungan terperinci ## Manakah Lebih Pantas dalam MySQL: `LIKE` atau `LOCATE` untuk Padanan Rentetan?. 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