Это потому, что правила сортировки символов Unicode более сложны, чем правила сортировки символов не-Unicode.
Но все не так просто, как varchar vs nvarchar
Вы также должны рассмотреть SQL Collation против Windows Collation, как объяснено здесь .
SQL Server выполняет сравнение строк определенных данных не в Юникоде
с сортировкой Windows с использованием правил сортировки Unicode. Потому что эти
правила гораздо сложнее, чем правила сортировки не в Юникоде, они
более ресурсоемкий. Таким образом, хотя правила сортировки Unicode
часто дороже, как правило, разница в
производительность между данными Unicode и не-Unicode данными, определенными
Windows сортировка.
Как уже говорилось, для Windows Collation SQL Server будет использовать правила сортировки Юникода для varchar, следовательно, вы не получите прироста производительности.
Вот пример:
-- Server default collation is Latin1_General_CI_AS
create table test
(
testid int identity primary key,
v varchar(36) COLLATE Latin1_General_CI_AS, --windows collation
v_sql varchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS, --sql collation
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_sql like '%abcd%' option (maxdop 1)
-- CPU time = 625 ms, elapsed time = 620 ms.
-- search utf8 string
select COUNT(1) from test where v like '%abcd%' option (maxdop 1)
-- CPU time = 3141 ms, elapsed time = 3389 ms.
-- search utf8 string using unicode (uses convert_implicit)
select COUNT(1) from test where v like N'%abcd%' option (maxdop 1)
-- CPU time = 3203 ms, elapsed time = 3209 ms.
-- search unicode string
select COUNT(1) from test where nv like N'%abcd%' option (maxdop 1)
-- CPU time = 3156 ms, elapsed time = 3151 ms.
Как видите, нет разницы между varchar и nvarchar с сопоставлением окон.
Примечание. Похоже, что параметры сортировки SQL включены только для унаследованных целей и не должны использоваться для новых проектов (даже если кажется, что они имеют более высокую производительность).