1、你的[用户id]列是非聚集索引;如果该列为自增列,建议使用聚集索引
2、看执行计划,你本身有个聚集索引,但不知道是哪一列,如果聚集索引被占用,建议创建索引覆盖
create index idx_name on tb(col_name)
include(select中的列除去索引列)
2、看执行计划,你本身有个聚集索引,但不知道是哪一列,如果聚集索引被占用,建议创建索引覆盖
create index idx_name on tb(col_name)
include(select中的列除去索引列)
用户id 不是自增列,是可插入的字段
聚集索引是本表的iid
你看第二张截图,中间已经提示了 缺少索引另外,执行select * from sys.dm_db_missing_index_details
可以发现 索引 用户id 已经失效了啊
我这个表 字段 iid,是pk,聚集索引
字段 用户id,int ,可插入重复值 ,非聚集索引
现在 想查询 用户id=1的内容
数据库执行计划提示 “缺少索引”u013226693 你看有什么解决方法吗?
1、当然还是没有include,虽然先按“用户ID”索引查找了,但是还要查那些非索引字段,还要通过聚集索引再定位到数据行才能查出。比如你只select iid,用户id,这两个已是索引字段,其他字段不查,那么绝对不会报“失效”。这就是include关键字出现的用处。
2、查出的结果集占总数据集比例过大,如何测试?你插入2、3条用户id=999999的记录,查这id,就不会报“失效”。这一点,应该就是“选择性原则”吧。
谢谢各位啦
你看第二张截图,中间已经提示了 缺少索引另外,执行select * from sys.dm_db_missing_index_details
可以发现 索引 用户id 已经失效了啊你看下面那个执行计划提示缺失的索引,实际索引列不变,只是要你加上include去实现索引覆盖;
其实从第一个执行计划就能看出来,键查找,是由于索引列中未包含全部output的列,所以需要从非聚集索引的叶子页获取聚集键,再导向聚集索引中获取其他键值;