网站建设资讯

NEWS

网站建设资讯

MySQL优化语句执行的方法有哪些

这篇文章主要介绍“MySQL优化语句执行的方法有哪些”,在日常操作中,相信很多人在MySQL优化语句执行的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL优化语句执行的方法有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联建站专注于企业成都全网营销推广、网站重做改版、平房网站定制设计、自适应品牌网站建设、成都h5网站建设成都做商城网站、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为平房等各大城市提供网站开发制作服务。

like 前导符优化

like模糊查询形如'%AAA%'和'%AAA'将不会使用索引,但是业务上不可避免可能又需要使用到这种形式。

通常的方法有两种:

  • 优化方案一:使用覆盖索引,即查询出的列只是用索引就可以获取,而无须查询表记录,这样也走了索引;

  • 优化方案二:使用locate函数或者position函数代替like查询:如table.field like '%AAA%'可以改为locate('AAA',  table.field) > 0或POSITION('AAA' IN table.field)>0

in 和 exist

如果查询的两个表大小相当,那么用in和exists差别不大。 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:  例如:表A(小表),表B(大表)

示例一:

MySQL优化语句执行的方法有哪些

示例二:

MySQL优化语句执行的方法有哪些

not in 和 not exist

如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not exist 的子查询依然能用到表上的索引。所以无论哪个表大,用not  exists都比not in要快!

MySQL优化语句执行的方法有哪些

子查询优化

  • MySQL 5.6  之前的版本对子查询处理:不会将查询的结果集计算出来用作与其他表做join,outer表每扫描一条数据,子查询都会被重新执行一遍。

  • MySQL 5.6 对子查询的处理 :将子查询的结果集 cache  到临时表里,临时表索引主要用来移除重复记录,并且随后也可能用于做join查询,这种技术在 5.6  中叫做物化的子查询,物化子查询可以看到select_type字段为subquery,而在 5.5 里为DEPENDENT SUBQUERY。

  • 子查询一般都可以改成表的关联查询,子查询会有临时表的创建、销毁,效率低下。

MySQL优化语句执行的方法有哪些

straight_join

mysql hint:

Mysql 优化器在处理多表的关联的时候,很有可能会选择错误的驱动表进行关联,导致了关联次数的增加,从而使得sql语句执行变得非常的缓慢。

这个时候需要有经验的DBA进行判断,选择正确的驱动表,这个时候 straightjoin  就起了作用了,下面我们来看一看使用straight_join进行优化的案例:

尝试采用user表做驱动表,使用straight_join强制连接顺序:

MySQL优化语句执行的方法有哪些

高效分页

传统分页:

select * from table limit 10000,10

limit原理:

  • Limit 10000,10

  • 偏移量越大则越慢

推荐分页:

MySQL优化语句执行的方法有哪些

复杂关联SQL的优化

  • 首先查询返回的结果集,通常查询返回的结果集很少,是有优化的空间的。

  • 通过查看执行计划,查看优化器选择的驱动表,从执行计划的rows可以大致反应出问题的所在。

  • 搞清各表的关联关系,查看关联字段是否有合适的索引。

  • 使用straight_join关键词来强制调整驱动表的选择,对优化的想法进行验证。

  • 如果条件允许,对复杂的SQL进行拆分。尽可能越简单越好。

force index

有时优化器可能由于统计信息不准确等原因,没有选择***的执行计划,可以人为改变mysql的执行计划,例如:

MySQL优化语句执行的方法有哪些

count的优化

按照效率排序的话,count(字段)

到此,关于“MySQL优化语句执行的方法有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


本文题目:MySQL优化语句执行的方法有哪些
URL链接:http://cdweb.net/article/psedch.html