首页 > 代码库 > MYSQL SQL 优化
MYSQL SQL 优化
1.通过show status命令了解各种SQL执行的频率
show [session|global]status 命令可以提供服务器状态信息,Com_xxx表示每个语句执行的次数。Innodb_xxx至少针对Innodb引擎
通过这些参数可以很容易了解当前数据库以插入为主还是以查询为主,以及各类SQL 执行比例是多少。
Connections:试图连接MYSQL服务器的次数
Uptime:服务器工作时间
slow_querier:慢查询次数
2.定位执行效率较低的SQL语句
通过慢查询日志定位,不是很准确
可以使用show processlist 查看当前MYSQL 在进行的线程,包括线程的状态,是否锁表等,可以实时地查看SQL的执行情况。同时对一些锁表操作进行优化。
3.通过EXPLAIN分析低效SQL的执行计划
select_type :表示select的类型,常见取值SIMPLE(简单表,即不使用表连接或者子查询)。PRIMARY(主查询,即外层查询)。UNION(UNION 中的第二个或者后面的查询语句),SUBQUERY(子查询中的第一个SELECT等)
table:输出结果集表
type:表示MYSQL 在表中找到所需行的方式,或者叫服务类型。
常见的有,ALL INDEX RANGE REF EQ_REF CONST,SYSTEM NULL从左到右 ,性能由最差到最好
ALL:全表扫描,遍历全表
Index:索引全扫描,Mysql遍历整个索引查询匹配的行
Range:,索引范围扫描,常见于<,<=,>,>=,between 等操作符
ref,使用非唯一索引扫描或者唯一索引的前缀扫描,返回匹配某个单独值的记录行
eq_ref:类似REF,区别在于使用的索引是唯一索引,对于每个索引的键值表中有一天记录匹配,简单来说,就是多表连接中使用primary key或者unique index作为关联条件
const、systom :单表中最多有一个匹配行,查询起来非常迅速,所以则个匹配行中其他的列可以被优化器在当前查询中当做常量来处理。李二