【发布时间】:2021-08-26 03:00:39
【问题描述】:
其实我是用下面的查询来获取结果的,但是我觉得查询有点长,我可以帮助我优化下面的查询吗?
SELECT
o.orderid AS id,
sd.datestart AS startdate,
sd.dateend AS enddate,
o.comment AS comment,
o.productname AS name,
o.suspended AS sus,
o.voided AS void,
o.invoice_number AS inumber,
GROUP_CONCAT(js.title) AS sections,
GROUP_CONCAT(js.sectionid) AS sectionid,
js.is_science_education AS isse,
o.amount AS amount,
js.isbundle,
o.addedbyuserid,
(SELECT
COUNT(*)
FROM
institutiontoorder AS ito2
WHERE
orderid = ito.orderid) AS multiple
FROM
institutiontoorder AS ito
LEFT JOIN
subscribedates AS sd ON ito.orderid = sd.orderid
LEFT JOIN
ordertosection AS ots ON ots.orderid = ito.orderid
LEFT JOIN
orders AS o ON o.orderid = ito.orderid
LEFT JOIN
institutions AS i ON i.institutionid = ito.institutionid
JOIN
journalsections AS js ON js.sectionid = ots.sectionid
WHERE
ito.institutionid = '1419'
AND o.voided != 1
AND o.suspended != 1
AND (dateend >= NOW())
GROUP BY o.orderid
ORDER BY o.orderid DESC;
我在使用多个连接,是否可以优化依赖子查询?
【问题讨论】:
-
是否可以优化依赖子查询? 如果
orderid被索引,则无需优化。您可以尝试将其从输出列表 (SELECT) 移动到行源 (FROM),但我怀疑这会有所改善。 -
@Akina 可以不用子查询实现查询吗?
-
没有。您需要计算未过滤行的数量。正如我从您的查询中看到的那样。
-
是否可以将
o.voided != 1 AND o.suspended != 1重写为o.voided = 0 AND o.suspended = 0?等式可以比不等式更有效地利用索引。
标签: mysql sql query-optimization