大部分人说的SQL优化
阿粉之前帮公司面试过一部分人,因为之前和老大一起面试,所以也看过不少人的简历,而简历上对于数据库这块内容,很多人都写的是这个样子的。
- 熟练使用 MySQL,SQLServer,熟悉Oracle,熟悉SQL语句优化。
确实,如果你对数据库没有进行过深入的了解的时候,你也不敢往上面写,只能是去写关于SQL语句优化方面的,但是很多时候,在你写完这个SQL语句之后,你是压根不会去主动的去优化的,很多时候都是停在了,不出问题,我就不改,只要功能实现了,那么,一切万事大吉。
而本文,告诉你,不要只是会SQL语句优化。
SQL语句优化
我们在面试的时候,面试官看你写了SQL语句优化,有时候就会提问了,那你说说SQL语句优化都是在哪些方面的吧。
关于SQL语句优化,内容可就比较多了。
- 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
- 尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
- 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。
。。。。。
类似这样的SQL语句优化还有很多很多,但是大家有没有注意到我在上面标注出来的内容,引擎? 相信大家之前肯定也都知道,但是没有做过多的研究,但是为了各位面试顺利,我们就来加紧分析这个吧。
MySQL体系
以下全文,全部按照MySQL来进行分析,分析引擎,我们先从MySQL分析吧。MySQL的体系结构图如下:
我们能从图中看出一点内容,比如说MySQL的组成部分。
- 连接池组件
- 管理服务和工具组件
- SQL接口组件
- 查询分析器组件
- 优化器组件
- 缓冲(Cache)组件
- 插件式存储引擎
- 物理文件
不得不说,这个插件式存储引擎总结的是极其精辟的呀,MySQL数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎。
但是我们要注意一个最重要的,那就是存储引擎是基于表的,而不是数据库。
MySQL存储引擎
存储引擎是MySQL区别于其他数据库的一个最重要特性,每个存储引擎都有他们自己的特点,不同的特点,会在不同的场景下使用,虽然我们在开发中很多时候都是使用的一种,但是能够根据具体的应用建立不同存储引擎表,这才是最牛逼的吧。
那么我们看看MySQL都支持哪些存储引擎把,手动在自己的MySQL中输入查询语句 show engines
,就会如下图所示。
大家看完是不是感觉还挺多,但是MySQL的9种存储引擎都是各自是各自的特点,然后根据需求的不同,我们在建表的时候可以选择一下,是不是发现了又一个带妹的好机会,那我们就开始分析一下吧。