сканирование больших индексов займет много времени, несмотря ни на что.
Что вам нужно сделать, это сократить индексы.
Что вы можете сделать, это иметь целочисленный столбец, в котором контрольная сумма URL рассчитывается и сохраняется,таким образом, ваш индекс будет узким, а счет будет быстрым.
обратите внимание, что контрольная сумма не уникальна, но достаточно уникальна.Вот полный пример кода, как это сделать.Я включил контрольные суммы для обоих столбцов, но, вероятно, нужен только один.Вы также можете самостоятельно рассчитать контрольную сумму на вставке или обновлении и удалить триггер.
CREATE TABLE MyTable
(
ID INT IDENTITY(1,1) PRIMARY KEY,
[Guid] varchar(64),
Url varchar(900),
GuidChecksum int,
UrlChecksum int
)
GO
CREATE TRIGGER trgMyTableCheckSumCalculation ON MyTable
FOR UPDATE, INSERT
as
UPDATE t1
SET GuidChecksum = checksum(I.[Guid]),
UrlChecksum = checksum(I.Url)
FROM MyTable t1
join inserted I on t1.ID = I.ID
GO
CREATE NONCLUSTERED INDEX NCI_MyTable_GuidChecksum ON MyTable(GuidChecksum)
CREATE NONCLUSTERED INDEX NCI_MyTable_UrlChecksum ON MyTable(UrlChecksum)
INSERT INTO MyTable([Guid], Url)
select NEWID(), 'my url 1' union all
select NEWID(), 'my url 2' union all
select null, 'my url 3' union all
select null, 'my url 4'
SELECT *
FROM MyTable
SELECT COUNT(GuidChecksum)
FROM MyTable
WHERE Url = 'my url 3'
GO
DROP TABLE MyTable