sql >> Databasteknik >  >> RDS >> Mysql

Prestanda för RegEx vs LIKE i MySql-frågor

Det är möjligt att det kan vara snabbare eftersom LIKE-villkoret kan utvärderas snabbare än det reguljära uttrycket, så om de flesta rader misslyckas i testet kan det vara snabbare. Det kommer dock att gå långsammare om de flesta rader lyckas eftersom två tester måste köras för framgångsrika rader istället för bara en. Det beror också på vilket uttryck optimeraren väljer att köra först.

En ännu större hastighet kan ses om du har något liknande:

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

Nu kan ett index användas för att hitta sannolika rader eftersom LIKE '179%' är sargable . Många rader behöver inte kontrolleras alls.

Som alltid är det bästa sättet att vara säker att mäta det själv på dina faktiska data.



  1. Left Outer Join returnerar inte alla rader från mitt vänstra bord?

  2. Returnera en lagrad procedur ut markörvariabel i cx_oracle

  3. Hitta alla heltalskolumner som når sina gränser med informationsschema

  4. Lägg upp Google Forms till en MySQL-databas?