Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

La ricerca CHARINDEX vs LIKE offre prestazioni molto diverse, perché?

Risponderò alla mia domanda poiché è stato difficile trovare una risposta corretta e mi è stato indicato il problema dall'output del piano di esecuzione di SQL Server 2012. Come vedi nella domanda originale, tutto sembra a posto in superficie. Questo è SQL Server 2008.

Quando eseguo la stessa query nel 2012, ho ricevuto un avviso su CHARINDEX interrogazione. Il problema è che SQL Server ha dovuto eseguire la conversione del tipo. Address1 è VarChar e la query ha N'1124' che è Unicode o NVarChar . Se cambio questa query in questo modo:

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

Quindi funziona come LIKE interrogazione. Quindi, la conversione del tipo causata dal generatore di Entity Framework stava causando questo orribile successo nelle prestazioni.