【问题标题】:What is the best Index to my Query in SQL Server?SQL Server 中我的查询的最佳索引是什么?
【发布时间】:2017-02-27 10:04:40
【问题描述】:

我在 JC_ItemDailySalesParent 表中有数百万条数据。当我进行分组时,它的加载时间超过 5 分钟,但还没有完成。

受影响的总行数可能是 500,000 条记录(未分组)

select  pp.ItemLookupCode,
            StoreID,
            sum(Qty) TotalQuantity,
            sum(ExtendedPrice) ExtendedPrice,
            sum(ExtendedCost) ExtendedCost
            into #temp_tt
FROM [HQMatajer].[dbo].[JC_ItemDailySalesParent] pp
WHERE   (Time>=CONVERT(datetime,'2015-01-01 00:00:00.000',102))  and 
        (Time<=CONVERT(datetime,'2015-01-31 00:00:00.000',102))
group by pp.ItemLookupCode,StoreID
    order by pp.ItemLookupCode

我为时间创建了索引。

【问题讨论】:

  • 我认为如果您在变量中捕获截止日期,您的查询将会得到改善,因此不必对每一行都使用 convert 函数。另外,如果你在另一个表中插入,你为什么要order by
  • 只看执行计划。
  • @HoneyBadger 你能举个例子吗?
  • @mohamedfaisal 否决票可能是因为要解决性能问题,需要更多信息。如表属性、执行计划、硬件等。
  • 最快的结果通常是通过使用覆盖索引来实现的 - 将所有其他结果列(itemlookupcode 和 storeid 作为索引的一部分,其他三列作为包含的列)添加到您的时间索引,然后 SQL 不需要完全读取其他数据。

标签: sql sql-server stored-procedures indexing


【解决方案1】:

如果您已经在 Time 上建立了索引,则执行以下操作可能会提高您的查询性能:

declare @DateStart datetime = CONVERT(datetime,'2015-01-01 00:00:00.000',102)
,       @DateEnd datetime = CONVERT(datetime,'2015-01-31 00:00:00.000',102)

select  pp.ItemLookupCode,
            StoreID,
            sum(Qty) TotalQuantity,
            sum(ExtendedPrice) ExtendedPrice,
            sum(ExtendedCost) ExtendedCost
            into #temp_tt
FROM    [HQMatajer].[dbo].[JC_ItemDailySalesParent] pp
WHERE    Time>=@DateStart  and 
         Time<=@DateEnd
group by pp.ItemLookupCode
,        StoreID
order by pp.ItemLookupCode

【讨论】:

    【解决方案2】:

    这个表的pk是多少?

    是的,如果您已经在此表上提供其他索引,则必须提供数据类型。 除了上述更正的查询。

    i) 按时创建 NCI 包括 (Qty,ExtendedPrice,ExtendedCost)

    ii) 在ItemLookupCode上创建一个NCI,StoreID包括(Qty,ExtendedPrice,ExtendedCost)

    首先做 i) 并且只在 ItemLookupCode,StoreID 上创建一个 NCI 并使用 diff 一次又一次地检查实际的查询计划。参数。

    如果没有使用索引,则完全执行 i) 和 ii) 并检查查询计划。

    我认为这就是您微调任何查询的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      相关资源
      最近更新 更多