表:dbo.Cache
表定义:
create tABLE DBO.CACHE
(
Serial int identity(1,1) not null Primary Key,
StringSearched nvarchar(30),
RowId int,
ColName nvarchar(30),
PercentMatch decimal(18, 4),
createdAt datetime default getdate(),
modifiedAt datetime default getdate(),
createdBy nvarchar(128) default SUSER_NAME(),
ModifiedBy nvarchar(128) default SUSER_NAME()
)
索引:
create nonclustered index nonclustInd_Cache
ON Cache(StringSearched, ColName) include( RowId, PercentMatch) --It is a covering index as per the query we have
create nonclustered index nonclustInd_Cache_RowId
ON Cache(RowId)
查询:
INSERT INTO #Temp2(RowNumber,ValFromUser,ColumnName,Percentage) SELECT RowId,StringSearched,ColName,PercentMatch FROM dbo.Cache AS C WHERE StringSearched = @email AND colName = 'email'
执行计划:
超过百万行:
问题:
如何避免此表扫描?这个表是一个缓存表将是非常庞大的,我不能在其上进行表扫描。
答案 0 :(得分:-1)
尝试使用forceseek FORCESEEK适用于群集和 非聚集索引寻求操作。 FORCESEEK表提示可能是 当查询计划在a上使用表或索引扫描运算符时很有用 表或视图,但索引查找运算符可能更有效。