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

Výkon RegEx vs LIKE v dotazech MySql

Je možné, že by to mohlo být rychlejší, protože podmínka LIKE může být vyhodnocena rychleji než regulární výraz, takže pokud většina řádků v testu selže, může to být rychlejší. Bude však pomalejší, pokud bude většina řádků úspěšná, protože pro úspěšné řádky musí být provedeny dva testy namísto pouze jednoho. Záleží také na tom, který výraz se optimalizátor rozhodne spustit jako první.

Ještě větší zrychlení může být svědkem, pokud máte něco takového:

SELECT * FROM (
   SELECT * FROM lineage_string
   WHERE lineage LIKE '179%'
) WHERE lineage regexp '^179(/|$)'

Nyní lze k nalezení pravděpodobných řádků použít index, protože LIKE '179 %' je sargable . Mnoho řádků nebude nutné vůbec kontrolovat.

Jako vždy nejlepší způsob, jak mít jistotu, je změřit si to sami na svých skutečných datech.



  1. Jak mohu povolit protokol pomalých dotazů MySQL na svém serveru?

  2. Jak přidat klauzuli where do příkazu MySQL Insert?

  3. Příkaz At-Sign v SQL před názvem sloupce

  4. Zacházení s duplicitními primárními klíči při vložení v SQLAlchemy (deklarativní styl)