sql优化判断
1.首先是定位效率比较低的sql语句
2.使用explain分析低效SQL的执行计划
type=const/system 单表中最多有一个匹配行
type=eq_ref 使用唯一索引,对于每个索引键值,表中只有一条记录匹配
type=ref 使用的是非唯一索引或者前缀索引扫描,返回匹配某个单独记录行
type=range 索引范围扫描 常见的操作是>= , <=, > , < , between;
type=index 索引扫描,mysql遍历整个索引来查找匹配的行
type=All 全表扫描,mysql遍历全表来找到匹配的行
3 innodb引擎的表在count(*)时经历了sending data状态,存在访问数据的过程。但是myisam引擎的表在execute之后就直接结束了查询,完全是不要访问数据的
mysql索引问题
索引是在mysql存储引擎层中实现的,而不是在服务器层实现的,索引每种存储引擎的索引都不完全相同的,也不是所有的存储引擎都支持所有的索引类型
B-tree 最常见的索引,B树索引不是二叉树 而是平衡树
HASH索引。只有memory引擎支持
R-tree 空间索引是mysql的一个特殊索引类型。主要用于地理空间数据类型
Full-text 全文索引。innodb从mysql5.6开始提供对全文索引的支持
mysql使用索引的典型场景
1 匹配全值
2 匹配值的范围查询
3 匹配最左前缀
4 仅仅对索引进行查询
5 匹配列前缀
mysql存在索引但是不能使用的典型场景
1,以%开头的查询不能使用B-Tree索引
2, 查询的数据类型出现隐式转化的时候也不能使用索引
3 ,符合索引,如果不满足最左原则的时候是不会使用符合索引的
4,如果你MySQL估计使用索引比全表查询要慢的时候就不在使用索引了
mysql检查表和优化表
检查表 check table tablename ,
分析表 analyze table tablename
优化表 optimize table tablename 这个命令可以将表的空间碎片进行合并,并且可以消除忧郁删除数据造成的空间浪费