【发布时间】:2017-01-21 08:52:58
【问题描述】:
我想减少执行时间。这是我的查询:
SELECT
StoreID,
ItemLookupCode,
sum(TotalQuantity) TotalQuantity,
sum(ExtendedPrice) ExtendedPrice,
sum(ExtendedCost) ExtendedCost
FROM
[HQMatajer].[dbo].[JCF_ItemDailySalesParent]
WHERE
time >= CONVERT(DATETIME, '2015-01-01 00:00:00', 102) AND
time <= CONVERT(DATETIME, '2015-12-31 00:00:00', 102)
GROUP BY
ItemLookupCode, StoreID
执行此查询需要 3 分 33 秒。该表中的记录总数为 800 万。从数据库中检索到的总行记录数为 87,000
我为所有列创建了索引。
表定义
[StoreID] [nchar](150) NOT NULL,
[ItemLookupCode] [nvarchar](25) NULL,
[ExtendedDescription] [varchar](3000) NULL,
[DepartmentID] [int] NULL,
[DepartmentName] [nvarchar](30) NULL,
[CategoryID] [int] NULL,
[CategoryName] [nvarchar](30) NULL,
[SupplierID] [int] NULL,
[SupplierCode] [nvarchar](17) NULL,
[SupplierName] [nvarchar](30) NULL,
[Time] [datetime] NOT NULL,
[TotalQuantity] [float] NULL,
[ExtendedPrice] [float] NULL,
[ExtendedCost] [float] NULL`
索引定义
CREATE NONCLUSTERED INDEX [JCF_AllColumns] ON [dbo].[JCF_ItemDailySalesParent]
(
[Time] ASC,
[ItemLookupCode] ASC,
[StoreID] ASC,
[ExtendedDescription] ASC,
[DepartmentID] ASC,
[DepartmentName] ASC,
[CategoryID] ASC,
[CategoryName] ASC,
[SupplierID] ASC,
[SupplierCode] ASC,
[SupplierName] ASC,
[TotalQuantity] ASC,
[ExtendedPrice] ASC,
[ExtendedCost] ASC
)
我使用的是 SQL Server 2012。
【问题讨论】:
-
为什么是负分?
-
这取决于几件事。您的硬件、您的索引方法等。您的问题没有找到最佳解决方案的线索。
-
@NimaRostami 你给负分了吗?
-
您能否展示所涉及的表的表结构,并提供您如何创建这些索引的确切定义?另外:您使用的是哪个版本的 SQL Server? 2008, 2008 R2, 2012, 2014, 2016 ??
-
@mohamedfaisal 是的,我做到了。但我删除了它。
标签: sql-server stored-procedures query-optimization