Eche un vistazo al siguiente ejemplo. Muestra que la búsqueda dentro de una cadena Unicode (nvarchar) es casi ocho veces peor que buscar dentro de una cadena varchar. Y a la par con las conversiones implícitas. Buscando una explicación para esto. O una forma de buscar dentro de cadenas nvarchar de manera más eficiente.SQL Server usa una CPU alta cuando busca dentro de las cadenas nvarchar
use tempdb
create table test
(
testid int identity primary key,
v varchar(36),
nv nvarchar(36),
filler char(500)
)
go
set nocount on
set statistics time off
insert test (v, nv)
select CAST (newid() as varchar(36)),
CAST (newid() as nvarchar(36))
go 1000000
set statistics time on
-- search utf8 string
select COUNT(1) from test where v like '%abcd%' option (maxdop 1)
-- CPU time = 906 ms, elapsed time = 911 ms.
-- search utf8 string using unicode (uses convert_implicit)
select COUNT(1) from test where v like N'%abcd%' option (maxdop 1)
-- CPU time = 6969 ms, elapsed time = 6970 ms.
-- search unicode string
select COUNT(1) from test where nv like N'%abcd%' option (maxdop 1)
-- CPU time = 6844 ms, elapsed time = 6911 ms.
FYI, resulta que la CPU más alta en el ejemplo conversión implícita (query 2) * no * es debido a la conversión en sí, sino a la lógica de comparación Unicode, al igual que la otra consulta Unicode (query 3) . –
Esta es una pregunta excelente y he agregado un enlace a mi respuesta aquí [varchar-vs-nvarchar-performance] (http://stackoverflow.com/questions/35366) – gbn
@gbn, en esa publicación se ha vinculado a http: //msdn.microsoft.com/en-us/library/ms189617.aspx, que es la explicación que más me gusta. ¡Gracias! –