日期:2014-05-17  浏览次数:20542 次

复合非聚集索引的问题
表如下:
id     主键
日期    聚集索引
店铺
班次
大类
小类
产品名称
规格
单位
单价


因为需要生成的报表比较多样化,所以得有非聚集索引。
我之前发过帖子问相关问题,有人给的回答中,建立的2个复合非聚集索引里是有重复的字段的。
比如
非聚集1:店铺+班次+产品名称
非聚集2:店铺+班次+大类+小类

同一个表中的2个复合索引,用到同样的字段,是怎么理解?

是以实际业务中需要查询的条件来定义的吗?
非聚集1:店铺+班次+产品名称——适用于指定店铺指定班次指定产品的查询统计
非聚集2:店铺+班次+大类+小类——适用于指定店铺指定班次指定大小类别的查询统计

是这样理解?还是我理解错了?

------解决方案--------------------
引用:
引用:非聚集索引有同样的键没有问题的啊。而且如果非聚集索引的键值和聚集索引有重复,存放时,非聚集索引是不会存放那些重复的键的。

非聚集和聚集不重复存放重复,这个明白了,谢谢!!!

非聚集和非聚集之间呢?
这个听说会忽略重复。
------解决方案--------------------
复合索引需要注意字段的个数和次序,一般情况字段太多没有意义

非聚集1:店铺+班次+产品名称
非聚集2:店铺+班次+大类+小类

如果覆盖两个查询当然也没有问题,但是一般各字段条件(你这里5个字段)自由选择情况下同样两个非聚集索引则应该调整次序,比如5个字段出现在条件的几率如果最高的是
店铺+班次+产品名称
店铺+班次+大类+小类

也可能出现
大类+小类
产品名称+大类
的话,同样两个聚集索引,则应该调整为
非聚集1:店铺+班次+产品名称
非聚集2:大类+小类+班次+店铺