在我的项目中,用于搜索的存储过程如下
create proc CommentGet
(
@Type int,
@ParentID int
)
as
begin
select * from CommentTable where (@Type is null or CommentTable.Type=@Type) and (@ParentID is null or CommentTable.ParentID=@ParentID)
end
在这种情况下,我将Type和ParentID作为CommentTable的非群集索引引入。运行代码时,我看到使用索引扫描而不是使用索引搜索的执行计划,以获得导致SQL需要读取整页的结果。而且显然我不能使用非群集索引功能。
到目前为止,我已经发现,如果在搜索词中使用变量,则会出现此问题,并且如果未直接使用线索的数量,则不会出现问题并且它可以正常工作(索引查找)。
请为您提供有关如何使用非集群索引权益的建议 Here exception plane as example, as you see written index scan instead of index Seek
答案 0 :(得分:0)
您以哪种方式编制索引?每个索引下是哪一列?我认为您没有正确索引或以最不适合您的查询的方式编制索引,因为sql在运行时会自动使用最佳和最有效的搜索。