“Nested Query(嵌套查询 / 子查询)”性能差,通常是执行方式、数据量和优化器限制共同导致的。下面从原理到常见原因系统说明,并给出优化思路。
嵌套查询指在一个 SQL 中嵌套另一个 SELECT,例如:
SELECT *
FROM orders o
WHERE o.customer_id IN (
SELECT customer_id
FROM customers
WHERE country = 'CN'
);
SELECT *
FROM orders o
WHERE o.amount > (
SELECT AVG(amount)
FROM orders
WHERE customer_id = o.customer_id
);
✅ 对比:JOIN 通常只扫描一次
WHERE id IN (SELECT id FROM big_table)
WHERE id NOT IN (SELECT id FROM t WHERE col IS NULL)
⚠️ 这是经典性能 + 正确性问题
常见情况:
SELECT ...
FROM (
SELECT ...
FROM (
SELECT ...
)
)
❌ 慢:
SELECT *
FROM orders
WHERE customer_id IN (
SELECT id FROM customers WHERE country='CN'
);
✅ 快:
SELECT o.*
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE c.country = 'CN';
Nested Query 性能差,核心原因是:执行次数不可控 + 优化器难展开 + 索引难利用。
如果你有具体 SQL 或数据库类型(MySQL / PostgreSQL / Oracle),我可以直接帮你改写并解释执行计划。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。