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

Wydajność RegEx vs LIKE w zapytaniach MySql

Możliwe, że mogłoby to być szybsze, ponieważ warunek LIKE może być oceniany szybciej niż wyrażenie regularne, więc jeśli większość wierszy nie przejdzie testu, może to być szybsze. Jednak będzie wolniejsze, jeśli większość wierszy się powiedzie, ponieważ dwa testy muszą zostać uruchomione dla udanych wierszy, a nie tylko jednego. Zależy to również od tego, które wyrażenie optymalizator wybierze do uruchomienia jako pierwsze.

Jeszcze większe przyspieszenie można zaobserwować, jeśli masz coś takiego:

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

Teraz indeks może być użyty do znalezienia prawdopodobnych wierszy, ponieważ LIKE '179%' to sargable . Wiele wierszy w ogóle nie musi być sprawdzanych.

Jak zawsze najlepszym sposobem, aby się upewnić, jest zmierzenie go samemu na rzeczywistych danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wypełnianie listy rozwijanej na podstawie poprzedniego wyboru

  2. Usuń wszystkie klucze obce w bazie danych (MySql)

  3. Odpowiednik daty i godziny daty (Now()) dla wstawienia

  4. WYBIERZ tylko wiersze zawierające tylko znaki alfanumeryczne w MySQL

  5. Czy mysql_real_escape_string() nie powinno zostawiać ukośników w bazie danych?