SQL优化介绍

sql调优
一、sql调优原则
减少数据访问: 设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO
返回更少的数据: 只返回需要的字段和数据分页处理 减少磁盘io及网络io
减少交互次数: 批量DML操作,函数存储等减少数据连接次数
减少服务器CPU开销: 尽量减少数据库排序操作以及全表查询,减少cpu 内存占用
利用更多资源: 使用表分区,可以增加并行操作,更大限度利用cpu资源
总结到SQL优化中,就三点:
最大化利用索引;
尽可能避免全表扫描;
减少无效数据的查询;
二、以mysql调优为例,
先介绍mysql的底层引擎
mysql底层引擎分为两种,引擎和 (默认)
定义:
:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎 。它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的,很少被回滚 。的性能与自动崩溃恢复的特性,使得它在非事务存储需求中也很流行 。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑引擎 。
:在MySQL 5.1 及之前的版本,是默认引擎 。提供的大量的特性,包括全文索引、压缩、空间函数(GIS)等,但并不支持事务以及行级锁,而且一个毫无疑问的缺陷是崩溃后无法安全恢复 。
支持事务,支持行级锁,必须要有主键,支持外键,聚集索引(数据文件和索引是放在一起的)
不支持事务,支持表锁,可以没有,不支持外键,,非聚集索引(数据和索引是分开的,索引保存的是数据的存储地址)
总结:在遇到大并发量的时候使用,在更新数据比较少,查找比较多的时候使用 。
【SQL优化介绍】三、sql执行顺序
1、from 子句组装来自不同数据源的数据;
2、where 子句基于指定的条件对记录行进行筛选;
3、group by 子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用子句筛选分组;
6、计算所有的表达式;
7、 的字段;

SQL优化介绍

文章插图
8、使用 order by 对结果集进行排序 。
四、索引失效的几种情况
五、执行计划的使用
使用方法,在语句前加上就可以了:
列的解释:
table:显示这一行的数据是关于哪张表的 。
type:这是重要的列,显示连接使用了何种类型 。从最好到最差的连接类型为 const、、ref、range、index 和 ALL 。
:显示可能应用在这张表中的索引 。如果为空,没有可能的索引 。可以为相关的域从 WHERE 语句中选择一个合适的语句 。
key: 实际使用的索引 。如果为 NULL,则没有使用索引 。很少的情况下,MYSQL 会选择优化不足的索引 。这种情况下,可以在语句中使用 USE INDEX()来强制使用一个索引或者用INDEX()来强制 MYSQL 忽略索引 。
:使用的索引的长度 。在不损失精确性的情况下,长度越短越好 。
ref:显示索引的哪一列被使用了,如果可能的话,是一个常数 。
rows:MySQL 认为必须检查的用来返回请求数据的行数
Extra:关于MYSQL如何解析查询的额外信息