news 2026/5/14 16:27:14

SQL嵌套查询性能基准测试_不同引擎下的表现差异

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL嵌套查询性能基准测试_不同引擎下的表现差异

MySQL 8.0 的 IN 嵌套子查询默认走嵌套循环,而 PostgreSQL 15 默认用 hash semi-join,故性能差约3倍;需 MySQL 显式提示 MATERIALIZE 或改写为 JOIN,PG 则需防 LIMIT 导致退化为 nestloop。MySQL 8.0 vs PostgreSQL 15 的 IN 嵌套子查询执行速度为什么差 3 倍?因为 MySQL 在多数情况下无法对 IN (SELECT ...) 子查询做物化(materialization),默认走嵌套循环(NLJ),而 PostgreSQL 15 默认启用 hash semi-join,直接把子查询结果哈希化后一次匹配。尤其当外层表大、子查询结果小(比如 SELECT id FROM users WHERE status = 'active')时,PostgreSQL 能跳过大量扫描。MySQL 8.0 需显式加 /*+ MATERIALIZE */ 提示(仅限优化器提示支持的版本),或改写为 JOIN + GROUP BYPostgreSQL 中若子查询含 LIMIT 或不可下推的表达式,hash semi-join 可能退化为 nestloop semi-join,用 EXPLAIN (ANALYZE) 看实际计划里的 Join Filter 是否出现测试时务必关掉查询缓存(MySQL 的 query_cache_type=0;PG 无全局缓存,但注意 shared_buffers 预热状态)SQLite 的 EXISTS 嵌套比 IN 快,但只在单表子查询成立SQLite 的查询规划器对 EXISTS 更激进地尝试使用索引查找(index lookup),而 IN 在子查询返回多列或含表达式时容易触发全表扫描。不过这个优势只在子查询本身不带 JOIN 或聚合的前提下稳定存在。如果子查询是 SELECT user_id FROM orders WHERE amount > 100,EXISTS 大概率走 user_id 索引;换成 IN 就可能变成先执行子查询再哈希匹配,而 SQLite 的哈希表实现较轻量,但内存受限时反而更慢一旦子查询含 GROUP BY 或窗口函数,SQLite 会强制走临时表,此时 EXISTS 和 IN 性能趋同,甚至更差(因多一次 EXISTS 判定开销)实测中,PRAGMA temp_store = MEMORY 对嵌套查询提速明显,但超过 temp_store_directory 限制后会静默切回磁盘,导致性能陡降ClickHouse 的 GLOBAL IN 网络放大问题怎么避免?GLOBAL IN 会把右子查询结果广播到所有分片节点,如果子查询返回 10 万行,集群有 20 个分片,就产生 200 万行网络传输 —— 这不是延迟问题,是带宽和内存双重瓶颈。普通 IN(本地)则只在当前节点执行子查询,但要求数据分布键与子查询字段一致。 There’s An AI For That 全球领先的 AI 聚合器,收集10,225个AI工具,可用于超过2,548个任务。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 16:26:14

Gemini在LMArena排行榜的位置变化:从发布到现在的评分趋势分析.

最近看模型更新,很多人不只看发布会参数,也会看 LMArena 这类公开榜单的用户投票表现。我平时做模型横评时,会先在 AI模型聚合平台 t。877ai。cn 上快速体验不同模型的回答风格,再结合 LMArena 排名变化做判断。因为榜单分数只能说…

作者头像 李华
网站建设 2026/5/14 16:26:09

Java字符输入全攻略

摘要: Java标准库没有直接提供nextChar()方法,这让很多初学者困惑。本文不仅讲解控制台字符输入的多种技巧,还扩展到文件字符读取、BufferedReader流式处理、命令行参数获取等实际开发场景,帮你构建完整的字符输入知识体系。一、为…

作者头像 李华
网站建设 2026/5/14 16:14:05

BMAD GUI:可视化仪表盘助力AI编程新手高效管理Claude Code项目

1. 项目概述:为AI编程新手打造的“可视化仪表盘”如果你刚开始接触AI辅助编程,尤其是尝试使用Claude Code配合BMad Method来开发项目,那么你很可能经历过这样的场景:打开终端,面对一个闪烁的光标和一行行滚动的文本输出…

作者头像 李华
网站建设 2026/5/14 16:11:10

MIPS汇编入门:用QtSpim模拟器手把手调试你的第一个.s程序

MIPS汇编入门:用QtSpim模拟器手把手调试你的第一个.s程序 第一次接触MIPS汇编语言时,很多人会被那些陌生的指令和寄存器搞得晕头转向。作为计算机体系结构课程的重要组成部分,MIPS汇编不仅帮助我们理解计算机底层工作原理,也是学…

作者头像 李华