mysql数据库sql优化——子查询优化

红太狼 2021-05-12 11:51 748阅读 0赞

1、什么是子查询、表关联查询:
子查询:是指在主sql语句中的select或where子句中使用select查询语句;select a.name,(select b.name from b where b.id=a.id) from a where a.name lik ‘a%’
表关联查询:指多个表联合查询;select a.name,b.name from a,b where a.id=b.id and a.name like ‘a%’;
虽然联合查询性能并不佳,但是和 MySQL 的子查询比起来还是有非常大的性能优势。MySQL 的子查询执行计划一直存在较大的问题,虽然这个问题已经存在多年,但是到目前已经发布的所有稳定版本中都普遍存在,一直没有太大改善。虽然官方也在很早就承认这一问题,并且承诺尽快解决,但是至少到目前为止我们还没有看到哪一个版本较好的解决了这一问题。
默认情况,子查询中使用全表扫描,所以总的I/O次数=主表数*子表数。当主表、子表中数据均查过1w时,使用子查询的整体性能就会立即下降,而且下降的会很厉害(测试发现大概需要10s多)

针对上面问题,解决方案:
1)对子表中的关联列建立索引、或建立外键关系:
如下有两张表a、b,使用子查询其执行计划如下

a表结构:

Center

Center 1

发表评论

表情:
评论列表 (有 0 条评论,748人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL查询优化思路

    > 子查询的优化最重要的优化建议是尽可能使用关联查询来代替。 > > 因为子查询每次查询出来的结果会暂时存放在临时表里,也会进行IO,与其如此还不如直接使用join来进行关联

    相关 mysql数据库查询优化

    总结: 尽可能减少扫表的行数,达到目的 查询执行的基础 一.基础 当希望mysql能够以更高的性能运行查询时,最好的办法就是弄清楚mysql是如何优化和执行查询