当前位置: 代码迷 >> Sql Server >> 求教索引失效有关问题
  详细解决方案

求教索引失效有关问题

热度:80   发布时间:2016-04-24 09:25:28.0
求教索引失效问题
一个比较简单的表,建了 用户id字段为非聚集索引
少量数据时查询,SQL执行计划结果如下


我用小程序生成相应随机值插入表,目前测试为10W记录
数据量大了,SQL执行计划显示没有索引了



这是什么原因造成的呢,有何解决方法,请大神赐教啊
------解决思路----------------------
1、你的[用户id]列是非聚集索引;如果该列为自增列,建议使用聚集索引
2、看执行计划,你本身有个聚集索引,但不知道是哪一列,如果聚集索引被占用,建议创建索引覆盖
create index idx_name on tb(col_name)
include(select中的列除去索引列)
------解决思路----------------------
我来说两句。首先经测试,因为是原来建的索引,不含include ,且select 字段很多,所以,即使重建原来的索引也无效。必须要建含include的索引,才不会出现“失效”。

那为什么会出现失效呢?我觉得有两个原因:
1、当然还是没有include,虽然先按“用户ID”索引查找了,但是还要查那些非索引字段,还要通过聚集索引再定位到数据行才能查出。比如你只select iid,用户id,这两个已是索引字段,其他字段不查,那么绝对不会报“失效”。这就是include关键字出现的用处。
2、查出的结果集占总数据集比例过大,如何测试?你插入2、3条用户id=999999的记录,查这id,就不会报“失效”。这一点,应该就是“选择性原则”吧。
  相关解决方案