mysql数据库sql优化——子查询优化
来源:互联网 发布:mac如何导出图片 编辑:程序博客网 时间:2024/05/23 16:54
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,使用子查询其执行计划如下
子查询:是指在主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表结构:
0 0
- mysql数据库sql优化——子查询优化
- SQL优化--逻辑优化--子查询优化(MySQL)
- sql 子查询优化
- mysql子查询优化
- mysql 子查询优化
- MySQL数据库优化(五)——MySQL查询优化
- MySQL SQL优化案例:相关子查询(dependent subquery)优化
- 数据库查询优化——Mysql索引
- 数据库查询优化——Mysql索引
- 数据库--SQL查询优化
- 数据库--SQL查询优化
- 数据库sql查询优化
- MYSQL数据库查询优化
- 优化MySQL数据库查询
- 优化MySQL数据库查询
- 优化MySQL数据库查询
- 优化MySQL数据库查询
- mysql数据库查询优化
- 100篇论文--大数据高手晋级
- CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
- OpenSessionInViewFilter作用及配置-懒加载
- log4j:WARN Please initialize the log4j system properly
- Wildcard Matching
- mysql数据库sql优化——子查询优化
- 关于tree的api
- java中的数组复制
- CLRS 4.5用主方法求解递归式
- mysql中case when用法
- printk打印不能显示到终端的问题
- linux之shell之grep,awk,sed
- 如何判定并设置YARN 和MapReduce 内存
- AngularJS下一些JS的属性