首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL优化最佳解释?

SQL优化最佳解释?
EN

Stack Overflow用户
提问于 2017-07-21 12:14:24
回答 1查看 33关注 0票数 1
代码语言:javascript
复制
SELECT op.order_id
FROM order o
JOIN order_product op
USING(order_id)
WHERE o.quantity_complete = 0
GROUP BY op.order_id 
HAVING SUM(op.presale) = 0

如果op.presale只包括0和1,那么在op.presale上建立索引是一个好主意吗?

EN

回答 1

Stack Overflow用户

发布于 2017-07-21 12:29:40

我不认为HAVING子句中的列上的索引会有任何影响。但是,您可以重写查询,将HAVING子句中的逻辑移至WHERE子句:

代码语言:javascript
复制
SELECT
    op.order_id
FROM order o
INNER JOIN order_product op
    ON o.order_id = op.order_id
LEFT JOIN
(
    SELECT DISTINCT order_id
    FROM order_product
    WHERE presale <> 0
) t
    ON op.order_id = t.order_id
WHERE
    o.quantity_complete = 0 AND
    t.order_id IS NULL          -- replaces the HAVING clause
GROUP BY op.order_id

这里的基本思想是连接到一个新子查询,该子查询查找至少有一个预售值不为零的所有order_id。因此,这样的匹配order_id将具有不等于零的预售总和。我对该子查询使用LEFT JOIN,然后只保留与该子查询不匹配的订单记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45228850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档