1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 高性能MySql进化论(十):查询优化器的局限性【MySQL】

高性能MySql进化论(十):查询优化器的局限性【MySQL】

时间:2019-07-23 17:25:33

相关推荐

高性能MySql进化论(十):查询优化器的局限性【MySQL】

数据库|mysql教程

进化论,局限性

数据库-mysql教程

wcf ef 源码,vscode多行标注快捷键,Ubuntu首次root,进入tomcat404,舟山爬虫店,php修改端口号,安徽抖音网络推广seo公司,aspx源码网站默认首页lzw

在“查询优化器常用的方式”一文中列出了一些优化器常用的优化手段。查询优化器在提供这些特性的同时,也存在一定的局限性,这些局限性往往会随着MYSQL版本的升级而得到改善,所以本文会列出一些常见的局限性,且不包含所有的。

圣诞节祝福 源码,vscode清除终端命令行,ubuntu 搭建系统,tomcat包没有安装,爬虫开发ide,php获取视频截图,湖北智能化seo优化方法,贷款网站素材lzw

1.1 关联子查询

秒赞网美化源码,ubuntu免费下载网站,tomcat网站修改后缀,python 快速爬虫,php书下载,黄浦区seo网络推广哪家好lzw

描述:

因为select …from table1 t1 where t1.id in(select t2.fk from table2 t2 wheret2.id=’…’) 类型的语句往往会被优化成 select …. From table1 t1 where exists (select* from table2 t2 where t2.id=’…’ and t2.fk=t1.id), 由于在进行tabl2查询时, table1的值还无法确定, 所以会对table1进行全表扫描

解决方案:

尽量用 INNER JOIN 替代 IN(),重写成 select * from table1 t1 inner jointable2 t2 using (id) where t2.id=’…’

1.2 UNION的限制

描述:

UNION操作不会把UNION外的操作推送到每个子集

解决方案:

为每个子操作单独的添加限制条件

例如 学生表有10000条记录,会员表有10000表记录,如果想按照姓名排序取两个表的前20条记录,如果在各个子查询中添加limit的话,则最外层的limit操作将会从40条记录中取20条,否则是从20000条中取20条

(select name from student order by name limit 20) union all (select name from memberorder by member limit 20) limit 20

1.3 等值传递

在进行查询操作的时候 IN,ON,Using,等操作往往会把一个列表的值在多个表之间共享,而优化器为了优化的方便会把列表里的值为每个相关表都拷贝一份,如果这个列表非常的大,会对性能造成一定的影响.

目前为止还没有好的策略应对这个问题

1.4 并行执行

目前

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。