Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Performa REGEXP (bandingkan dengan LIKE dan =)

Mengenai regexp

Regexp bisa tidak pernah gunakan indeks di MySQL.
= akan menggunakan indeks jika:

  • indeks dideklarasikan pada kolom;
  • nilai dalam kolom memiliki kardinalitas yang cukup (jika lebih dari +/- 20% baris cocok, MySQL tidak akan menggunakan indeks, karena dalam hal ini pemindaian tabel penuh lebih cepat );
  • Tidak ada indeks lain pada tabel yang sama yang lebih cocok (MySQL hanya dapat menggunakan satu indeks per tabel per subpilihan);

Mempertimbangkan ini dan beberapa peringatan esoteris lainnya, sebuah = perbandingannya banyak lebih cepat dari regexp.

Mengenai suka

LIKE dapat menggunakan indeks jika wildcard bukan karakter pertama.

SELECT * FROM t WHERE a LIKE 'abc'   <<-- (case insensitive `=`) can use an index
SELECT * FROM t WHERE a LIKE 'abc%'  <<-- can use an index
SELECT * FROM t WHERE a LIKE 'a%'    <<-- can use an index, depending on cardinality
SELECT * FROM t WHERE a LIKE '%a%'   <<-- cannot use an index
SELECT * FROM t WHERE a LIKE '_agf'  <<-- cannot use an index

Performa like saat menggunakan indeks sangat dekat dengan = (dengan asumsi jumlah baris yang sama dikembalikan).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menambah dan mengurangi tanggal, bulan, tahun melalui MySql Query

  2. Prosedur tersimpan tidak boleh digunakan di dunia php/mysql?

  3. hanya data mysqldump

  4. MySQL Query IN () Klausa Lambat pada Kolom Terindeks

  5. Fungsi MySQL LEAST() – Temukan Argumen Terkecil dalam Daftar Argumen