sql >> Databáze >  >> RDS >> Sqlserver

Vyhledávání CHARINDEX vs LIKE poskytuje velmi odlišný výkon, proč?

Odpovím na svou vlastní otázku, protože bylo těžké najít správnou odpověď a na problém mě upozornil výstup SQL Server 2012 Execution Plan. Jak vidíte v původní otázce - na povrchu vše vypadá OK. Toto je SQL Server 2008.

Když spustím stejný dotaz v roce 2012, dostal jsem varování na CHARINDEX dotaz. Problém je - SQL Server musel provést konverzi typu. Address1 je VarChar a dotaz má N'1124', což je Unicode nebo NVarChar . Pokud tento dotaz změním takto:

SELECT * 
FROM LOCAddress 
WHERE (CAST(CHARINDEX(LOWER('1124'), LOWER([Address1])) AS int)) 

Poté běží stejně jako LIKE dotaz. Konverze typů způsobená generátorem Entity Framework tedy způsobila tento hrozný zásah do výkonu.



  1. Vlastní funkce DQL v doctrine2

  2. ZDLRA – RMAN-20035 neplatná vysoká RECID

  3. Co v SQL znamená použití závorek s OR?

  4. Jak najít řádky kódu balených procedur a funkcí v Oracle