无论发生什么事都会花费很长时间的扫描索引。
你需要做的是缩短索引。
你可以做的是有一个整数列,其中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
'有一个关于guid和url的索引。'这是两个单独的索引还是一个组合索引? – 2010-01-12 21:00:22
2个单独的索引 – 2010-01-12 21:09:22