首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我对在db中使用聚集索引和非聚集索引感到困惑

问我对在db中使用聚集索引和非聚集索引感到困惑
EN

Stack Overflow用户
提问于 2012-08-07 10:01:04
回答 1查看 392关注 0票数 2

我希望你能分享你的时间来帮助我。

目前,我正在使用3个表来比较获取数据的性能。这3个表具有相同的列(LocInvID、ActivityDate、ItemID、StoreID、CustomerID)、相同的数据(约1 300万条记录):

  1. 表LocInv1:在LocInvID上使用聚集索引(它也是主键)。使用用于ActivityDate的分区表。3列(ItemID、StoreID、CustomerID)为非聚集索引.
  2. 表LocInv2:在LocInvID上使用聚集索引(它也是主键)。不使用分区表。
  3. 表LocInv3:在LocInvID上使用聚集索引(它也是主键)。3列(ItemID、StoreID、CustomerID)为非聚集索引.不使用分区表。 在主GO上( IX_LocInv3 = OFF,STATISTICS_NORECOMPUTE = OFF,SORT_IN_TEMPDB = OFF,IGNORE_DUP_KEY = OFF,DROP_EXISTING = OFF,ONLINE = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON)在LocInv3上创建NONCLUSTERED索引

当我运行这个查询字符串时(在3个表中)

代码语言:javascript
复制
select ActivityDate,ItemID,StoreID,CustomerID from LocInv1 WITH (INDEX(IX_LocInv))  where ItemID=43 
select ActivityDate,ItemID,StoreID,CustomerID from LocInv2 where ItemID=43 
select ActivityDate,ItemID,StoreID,CustomerID from LocInv3 where ItemID=43

结果很奇怪:

  1. LocInv1桌跑得最慢。有可能吗?我的查询字符串不正确?
  2. 表LocInv3使用非聚集索引,但在实际执行计划中,它是聚集索引扫描.我不明白,我用ItemID查询,为什么是聚集索引扫描?
  3. 表LocInv2只对LocInvID使用聚集索引,但得到了最快的结果。这是正确的吗?

请给我建议。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2012-08-21 12:53:38

查询优化器选择了他能够找到的快速方式,这不仅取决于索引,还取决于它们包含的数据。

通过聚集索引进行搜索通常会更快,但在某些情况下,这样做会更快,您可以测试它是否删除并再次放置索引。

更不用说了,取决于表所引用的操作(插入、更新、删除)和后期索引插入也会影响搜索。

这些更改将改变索引的存储方式,这取决于您可能有几个页面的索引的大小。

如果您可以在这些表中发布一个数据插入脚本,我会看上去更好。如果您只做了查询分析器测试(ctrl+l),那么它不应该是100%的acurate。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11843515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档