最开始使用SQLServer,我喜欢这么用SQL:select * from table1 where id in (select table1_id from table2 where table2_filed = xxxx) and table1_field = yyy; 这里的一个查询其实会分为两个查询,对table1和对table2的子查询,这样写能让每个查询都尽量使用索引。
曾几何时,使用mysql的时候用explain分析查询,发现mysql里面的子查询很慢,而mysql文档里很多时候也推荐使用join,于是我认定了mysql的子查询实现的很烂,以后的程序里面都用join了。例如上面的查询我就写成:select a.* from table1 a join table2 b on b.table2_field=xxx and b.table1_id=a.id where a.table1_field = yyy;
今天早上,接到一个电话,说ucdchina.com挂了。上去一看,一个表被管理员rename了,理由是涉及这个表的查询太耗时了,平均40s左右。我只能说,dreamhost实在太烂了,两个表总共不到2000条数据,怎么也不用那么久来查吧。我拿到管理员发出的慢查询,用explain看了一下,果然use filesort,use temporary file,SQL语法就是类似上面join那个例子。然后我根据查询里的字段建了两个索引,但是没效果。最后习惯性的尝试了一下子查询,把上面join的那个格式修改为in的方式,explain 的结果马上变成use index; use where。终于又对mysql的in恢复了信心。
优化了ucdchina.com的将近10条语句,整个网站速度快多了。
改变了对Mysql子查询的看法
本机暂存
同分类推荐文章
- 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
- 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
- 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)
建议继续学习
- 用Hyer来进行网站的抓取 (累计阅读 158,252)
- MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,400)
- WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
- Mysql监控指南 (累计阅读 21,352)
- 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,523)
- 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 13,058)
- 15个最好的免费开源电子商务平台 (累计阅读 12,541)
- 浅谈MySQL索引背后的数据结构及算法 (累计阅读 11,909)
- 整理了一份招PHP高级工程师的面试题 (累计阅读 11,709)
- 深入浅出INNODB MVCC机制与原理 (累计阅读 9,693)