【发布时间】:2016-08-10 11:45:10
【问题描述】:
我有一个“交易”表。
一个事务可以有多个“TransactionProduct”。
一个交易产品可以有多个“PriceModifiers”。
我有一个查询,它返回每个交易产品的总价格修正(减少金额)。
查询:
SELECT
TRANSACTION.DESCRIPTION,
TRANSACTIONPRODUCT.PRODUCTNAME,
TRANSACTIONPRODUCT.EFFECTIVEPRICE,
(
SELECT SUM(AMOUNT)
FROM PRICEMODIFIER
WHERE TRANSACTIONPRODUCTID = TRANSACTIONPRODUCT.TRANSACTIONPRODUCTID
)
AS REDUCTIONAMOUNT
FROM
TRANSACTION,
TRANSACTIONPRODUCT
WHERE
TRANSACTION.TRANSACTIONID = TRANSACTIONPRODUCT.TRANSACTIONID
如果我删除带有 Sum 的子查询,查询的执行速度非常快。
使用子查询,需要几秒钟...
知道如何改进查询吗?
【问题讨论】:
-
您可以添加索引。有索引吗?
-
对八十年代恐怖查询的报复? 1) JOIN 语法 2) 表别名 3) FULLCAPS 4) 标量子查询 5) “事务”是保留字/关键字;尽量避免作为表/列名
-
将 sum 子选择包含在 with 子句中,同时包含 id 并按 id 连接,而不是为每一行创建子查询。
-
几秒现在太慢了?
-
不,我没有索引。我应该把它们放在什么上面?感谢您对查询的建议...我通常不编写 SQL 查询。 (我使用 ORM)