Mysql
 sql >> база данни >  >> RDS >> Mysql

Производителност на REGEXP (сравнете с LIKE и =)

Относно рег. израз

Редовният израз може никога използвайте индекс в MySQL.
= ще използва индекс, ако:

  • в колоната е деклариран индекс;
  • стойностите в колоната имат достатъчна кардиналност (ако повече от +/- 20% от редовете съвпадат, MySQL няма да използва индекс, защото в този случай извършването на пълно сканиране на таблицата е по-бързо );
  • Нито един друг индекс в същата таблица не е по-подходящ (MySQL може да използва само един индекс на таблица за подизбор);

Като се имат предвид тези и някои други по-езотерични предупреждения = сравнението е много по-бързо от регулярен израз.

По отношение на харесването

LIKE може да използва индекс, ако заместващият знак не е първият знак.

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

Изпълнението на like при използване на индекс е много близък до = (ако приемем същия брой върнати редове).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Spring-Boot, не може да се запази Unicode низ в MySql с помощта на spring-data JPA

  2. Как да наложа уникално ограничение в MySQL?

  3. Грешка десетичната точност на MySQL и PHP

  4. Как да пренаредите MySQL колоните?

  5. PHP/MySQL - Съхраняване на данни от масив като JSON, лоша практика?