案例说明
更新时间: 2026-04-02 15:57:47
阅读 32
相关SQL语句说明
本案例中,使用如下的查询语句,在优化前,涉及到多表关联和子查询以及分页,使用了select * ,性能差,不可控:
SELECT *
FROM (
SELECT *
FROM order_main om
LEFT JOIN order_detail od ON om.order_id = od.order_id
WHERE om.order_status IN (1, 2, 3)
AND om.create_time >= '2025-01-01 00:00:00'
AND om.user_id IN (
SELECT user_id
FROM user_info
WHERE user_level >= 2
AND is_active = 1
)
) AS order_full
LEFT JOIN product_info pi ON order_full.product_id = pi.product_id
WHERE pi.is_on_sale = 1
ORDER BY order_full.create_time DESC, order_full.order_id DESC
LIMIT 0, 20;
代码优化说明
对整段代码执行注释,生成的样例代码如下,会对关键过滤条件和子查询以及整段SQL进行注释说明:
-- 获取2025年及之后创建、状态为1/2/3、且用户等级>=2的活跃用户的完整订单及明细信息
SELECT *
FROM (
-- 关联订单主表与明细表,并筛选符合条件的订单
SELECT *
FROM order_main om
LEFT JOIN order_detail od ON om.order_id = od.order_id -- 左连接订单明细表
WHERE om.order_status IN (1, 2, 3) -- 订单状态为1,2,3
AND om.create_time >= '2025-01-01 00:00:00' -- 创建时间在2025年及以后
AND om.user_id IN (
-- 子查询:筛选用户等级>=2且为活跃状态的用户ID
SELECT user_id
FROM user_info
WHERE user_level >= 2 -- 用户等级大于等于2
AND is_active = 1 -- 用户状态为活跃
)
) AS order_full
LEFT JOIN product_info pi ON order_full.product_id = pi.product_id
WHERE pi.is_on_sale = 1 -- 只取在售商品
ORDER BY order_full.create_time DESC, order_full.order_id DESC
LIMIT 0, 20;
代码注释效果截图

文档反馈
以上内容对您是否有帮助?