当前位置: 移动技术网 > IT编程>数据库>Mysql > MySQL---优化是否存在?

MySQL---优化是否存在?

2020年07月14日  | 移动技术网IT编程  | 我要评论

看到公众号推了一篇关于优化MySQL是否存在问题的文章,感觉能把之前的东西都串起来,就想着记现在的所思所想。

MySQL的语句执行顺序

众所周知,MySQL的执行语句如下所示:

  1. from子句
  2. join子句
  3. on子句
  4. where子句
  5. group by子句
  6. avg sum count max min
  7. having子句
  8. select子句
  9. order by子句
  10. limit子句

问题描述

当需要根据一个条件或多个条件查询是否存在记录,不关心多少条记录时,常用的SQL语句如下所示

SELECT count(*) FROM table WHERE a=1 AND b=2

很明显可以优化(根据覆盖索引,如果存在覆盖a和b的索引,则不需要回表了)

SELECT count(1) FROM table WHERE a=1 AND b=2

还可以优化

SELECT 1 FROM table WHERE a=1 AND b=2 LIMIT 1

根据上面的介绍可知,limit子句最后执行,为什么可以优化查询过程呢?
首先from子句会先生成一张虚拟表(不是临时表,由于查询优化器的存在,优化器会选择自己认为最好的执行顺序新建这张虚拟表,换句话说建虚拟表的过程无论如何都会有,只不过索引的存在可以让建立虚拟表的过程加快),然后select 1 … limit 1相较于 select count(1) 省去了遍历虚拟表的过程。就像循环中的见到第一条数据就返回。

本文地址:https://blog.csdn.net/weixin_41904840/article/details/107304613

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网