日期:2014-05-19  浏览次数:20545 次

关于索引扫描的问题?
我在A表在建立了一个主键(列名为AGuid,Guid类型)和一个聚集索引(列名为CreateTime,DateTime类型)

B表为A表的外表,在列AGuid上建了一个索引(非聚集索引)

执行以下语句

Select   *   form   a   inner   join   b   on   a.AGuid=b.AGuid  

为什么执行计划中,对A表采用聚集索引扫描?如果去掉聚集索引就成了表扫描了

为什么用不上AGuid上的索引呢

谢谢

------解决方案--------------------
所以楼主的语句, 理论上似乎是走 GUID 上的索引更有效.

但涉及到实际数据时, 就还要结合数据进行分析

在优化中, 基本上是要结合: 表结构(包括索引), 数据, 查询语句, 这三者来进行查询计划分析的, 缺一不可.
这也是为什么大家很少会看到使用OPTION和WITH提示, 因为这些提示往往限制让查询使用一种较为固定的方法, 如果数据经常变化, 这种做法往往导致大部分情况下查询性能并不好.