我希望你能分享你的时间来帮助我。
目前,我正在使用 3 个表来比较获取数据的性能。这 3 个表具有相同的列(LocInvID、ActivityDate、ItemID、StoreID、CustomerID)、相同的数据(大约 1300 万条记录):
表 LocInv1:在 LocInvID 处使用聚集索引(它也是主键)。使用 ActivityDate 的分区表。并且 3 列(ItemID、StoreID、CustomerID)是非聚集索引。
表 LocInv2:在 LocInvID 处使用聚集索引(它也是主键)。不使用分区表。
表 LocInv3:在 LocInvID 处使用聚集索引(它也是主键)。并且 3 列(ItemID、StoreID、CustomerID)是非聚集索引。不使用分区表。
创建非聚集索引 [IX_LocInv3] ON [LocInv3] ( [ItemID] ASC ,[StoreID] ASC , [CustomerID] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE =关闭,ALLOW_ROW_LOCKS = 开启,ALLOW_PAGE_LOCKS = 开启)开启 [PRIMARY] 开始
当我运行这个查询字符串时(在 3 个表中)
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
结果很奇怪:
表 LocInv1 变得最慢。可能吗?我的查询字符串不正确?
表 LocInv3 使用非聚集索引,但在实际执行计划中,它是聚集索引扫描。我不明白,我用ItemID查询,为什么是Clustered Index Scan?
Table LocInv2 仅对 LocInvID 使用聚集索引,但它得到了最快的结果。这是对的吗?
请指教。
谢谢。