Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wydajność REGEXP (porównaj z LIKE i =)

Dotyczy wyrażenia regularnego

Wyrażenie regularne może nigdy użyj indeksu w MySQL.
= użyje indeksu, jeśli:

  • indeks jest zadeklarowany w kolumnie;
  • wartości w kolumnie mają wystarczającą liczność (jeśli więcej niż +/- 20% wierszy jest zgodnych, MySQL nie użyje indeksu, ponieważ w takim przypadku wykonanie pełnego skanowania tabeli jest szybsze );
  • Żadne inne indeksy w tej samej tabeli nie są lepiej dopasowane (MySQL może używać tylko jednego indeksu na tabelę na podselekcję);

Biorąc pod uwagę te i inne bardziej ezoteryczne zastrzeżenia, = porównanie to dużo szybciej niż wyrażenie regularne.

Dotyczy polubienia

LIKE może użyć indeksu, jeśli symbol wieloznaczny nie jest pierwszym znakiem.

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

Wydajność like gdy użycie indeksu jest bardzo zbliżone do = (zakładając, że zwrócono taką samą liczbę wierszy).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę zrobić krytyczne błędy we WSZYSTKICH ostrzeżeniach mysql?

  2. Odniesienie do grup w regexie MySQL?

  3. Błąd SQL Nie mogę tego rozgryźć

  4. Konwersja MyISAM do InnoDB. Korzystny? Konsekwencje?

  5. jak ustawić tablicę jako zmienną użytkownika mysql