【发布时间】:2017-05-16 13:37:53
【问题描述】:
我正在尝试加快执行时间。我的查询有什么问题。进行查询优化的更好方法是什么。
TransactionEntry 有 200 万条记录
事务表有 50 亿条记录
这是我的查询,如果我删除 TotalPrice 列,我会在 10sec
得到结果--Total Quantity
SELECT
items.ItemLookupCode,sum(transactionsEntry.Quantity) Quantity,sum(transactionsEntry.Quantity*transactionsEntry.Price) TotalPrice
into
##temp_TotalPrice
FROM
(
SELECT
TransactionNumber,StoreID,Time
FROM
[HQMatajer].[dbo].[Transaction]
WHERE
Time>=CONVERT(datetime,'2015-01-01 00:00:00',102) and Time<=CONVERT(datetime,'2015-12-31 23:59:59',102)
) transactions
left join [HQMatajer].[dbo].[TransactionEntry] transactionsEntry
ON transactionsEntry.TransactionNumber=transactions.TransactionNumber and transactionsEntry.StoreID=transactions.StoreID
Left join [HQMatajer].[dbo].[Item] items
ON transactionsEntry.ItemID=items.ID
Group By items.ItemLookupCode
Order by items.ItemLookupCode
如果我执行这个(以上)查询,它会在 22 秒 内产生结果。太长了
当我单独执行子查询时(下一个)。需要 11 秒
(
SELECT
TransactionNumber,StoreID,Time
FROM
[HQMatajer].[dbo].[Transaction]
WHERE
Time>=CONVERT(datetime,'2015-01-01 00:00:00',102) and Time<=CONVERT(datetime,'2015-12-31 23:59:59',102)
) transactions
我为
TransactionEntry Table创建了一个索引
TransactionNumber,StoreID,ItemID,Quantity,Price
Transaction Table的一个索引`Time,TransactionNumber,StoreID`
Item Table的一个索引`ID`
TransactionEntry 的聚集索引需要 59% 的成本。那个 column_Name 是
AutoID
【问题讨论】:
-
在哪种数据库中,
Transaction的行数是TransactionEntry的 2,500 倍? -
@GordonLinoff 来自
Transaction Table的一个交易号将在TransactionEntry中拥有许多产品。
标签: sql sql-server sql-server-2012 query-optimization