您的位置:首页 > 数据库 > MySQL

MySQL高级,分析SQL语句,了解SQL的执行顺序以及索引的解析

2019-04-14 11:52 1081 查看

博主在运用MySQL中遇到了不少问题,踩过很多的坑,今天就跟一起来分析SQL的执行过程,索引的解析等…

SQL为什么执行慢

本人总结出了以下几点:
1.SQL语句写的烂
2.关联查询用了太多的join
3.没建索引或者索引失效
4.服务器调优及各个参数设置(调整my.cnf,缓冲,线程数)

SQL的执行顺序

我们一般读SQL语句都是从左往右读,从select … 开始依次读,下面我们来看一条SQL语句的结构:

上面是我们写的一条SQL的结构,接下来我们来看MySQL内部是怎么读取我们这条SQL语句的

由此可见,MySQL内部读SQL的时候是先从from读起,从哪个表读 连接的又有哪些表,然后再从where开始判断
,判断完后再开始执行select及后面的字段… 接下来我们看SQL执行的解析图:

索引

索引是什么?
MySQL官方的回答:索引就是帮助MySQL高效的获取数据的一种数据结构!
那么简单来说:索引就是一种数据结构!
索引的原理是什么?
索引的原理就和字典类似。
那么索引的底层是什么呢?请看以下几点:
索引:如果没有特别指明,都是指B树(并不一定是二叉树)结构组织的索引
聚集索引,次要索引,覆盖随意,复合索引,前缀索引,唯一索引:默认都是使用B+树索引,当然除了B+树还有哈希索引
索引的优劣势?
优势:提高数据检索的效率,降低数据库I/O的成本,通过索引对数据进行排序,降低数据库排序的成本,降低了CPU的消耗。
劣势:实际上,索引也是一张表,索引它也要占空间,索引大大提高了查询速度,但同时会降低更新速度,MySQL不仅要保存数据,还要更 4000 新索引文件。索引建立是否可取,还有索引的优化等。

如何建立索引

首先,主键约束就是一个索引
我相信大家都知道,建立一个简单索引就一条SQL语句:create index 索引名 on 表名(建立索引的字段);
但是,我们不能随便给表建立索引,要选择一个合适的字段去建立索引,比如说:经常更新的字段,我们就不适合给它建索引,表记录太少也不适合建立索引,如果那些经常被查询的字段,我们就应该给它建立一个索引,其次where条件里面用不到的字段,就不建议给它建一个索引,查询中与其它表关联的字段,外键关系建立索引,查询中排序的字段,应当给它建立索引,查询中分组的字段推荐建立一个索引,单键/组合索引的选择问题,在高并发条件下倾向于创建组合索引,一般来说一个表的索引数量不要超过5个。

本期就到这里了,下期的主题为,分析SQL语句的执行效率以及优化。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: