概述
在使用mysql的过程中积累了一定的Sql优化 经验,比如尽量不要使用Select *、尽量使用索引等,但背后的原因是什么呢?下面对一些常见的优化建议背后的原理进行一个分析。
1、为什么尽量不要使用Select *?
- 磁盘IO,mysql的数据是存放在磁盘中,查询的字段越多,和磁盘交互的次数就越大,增大了磁盘IO
- 内存,查询结果需要加载到内存中,字段越多占用的内存越高
- 网络传输/带宽,数据传输量越大占用的网络资源就越多
- 无法高效利用索引,不能使用索引覆盖(不太可能针对所有的字段建立索引),需要进行回表查询,无法充分利用索引的优化。
2、为什么使用联合索引?
- 减少开销,建立一个联合索引相当于建立了多个索引。实际中每多一个索引都会增加写操作和磁盘空间的开销,联合索引可降低开销
- 覆盖索引,当返回的字段是联合索引的字段时,可通过索引覆盖进行优化,不用再做回表操作,提高了性能
- 效率高,索引列多,通过索引列筛选出的数据越少。