sql >> Databáze >  >> RDS >> Mysql

Výkon REGEXP (porovnat s LIKE a =)

Ohledně regulárního výrazu

Regulární výraz nemůže nikdy použijte index v MySQL.
The = použije index, pokud:

  • ve sloupci je deklarován index;
  • hodnoty ve sloupci mají dostatečnou mohutnost (pokud se shoduje více než +/- 20 % řádků, MySQL nepoužije index, protože v takovém případě je provedení úplného prohledání tabulky rychlejší );
  • Žádné jiné indexy ve stejné tabulce nejsou vhodnější (MySQL může používat pouze jeden index na tabulku a podvýběr);

Vzhledem k těmto a některým dalším esoteričtějším výhradám = srovnání je hodně rychlejší než regulární výraz.

Pokud jde o jako

LIKE může použít index, pokud zástupný znak není první znak.

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

Výkon like při použití indexu je velmi blízko = (za předpokladu stejného počtu vrácených řádků).



  1. Co NENÍ logický operátor na serveru SQL - SQL Server / Výukový program TSQL část 121

  2. psql:FATAL:Ověření peer selhalo pro uživatele dev

  3. SQL Jak aktualizovat SUM sloupce přes skupinu ve stejné tabulce

  4. Směrování pomocí AngularJS a Slim PHP