摘要: 多列复合索引,就是指由多个字段组成的索引。多列复合索引的使用是相当普遍的,并且,在查询中,用多列复合索引来指定搜索范围的边界也是相当常用的。然而,微软sql server 在处理这类索引时,却有个重要的缺陷。
举个例子来说明问题,假设某个表T有索引 ( cityid, sentdate, userid), 现在有个分页列表功能,要获得大于某个多列复合索引V0的若干个记录的查询,用最简单表意的方式写出来就是 V >= V0, 如果分解开来,就是
cityid > @cityid0 or (cityid = @cityid0 and (sentdate > @sentdate0 or (sentdate = @sentdate0 and userid >= @userid0))),
当你写出上述查询时,你会期待sql server会自动的把上述识别为V >= V0类型的边界条件,并使用index seek操作来实施该查询。然而,微软的sql server 并没有那么聪明(其他的sql server如何还不得知), 当它遇到这样sql时,sql server就会采用index sc
阅读全文
posted @ 2010-12-14 18:44 SuperSaiyan 阅读(196) 评论(0)
编辑