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

Patricia Arquette
Lepaskan: 2024-10-25 02:36:30
asal
609 orang telah melayarinya

## 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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!