EXPLAIN 解析【这是查询sql是否效率够高经常用到的关键字】
•Possible_key:该查询可以利用的索引,如果没有任何索引可以使用null
•Key : Mysql从 Possible_key中所选择使用索引
•Key_len :被选中使用索引的索引长度
Rows :显示MySQL认为它执行查询时必须检查的行数
实例
实例2
创建所有的优缺点
优点:查询速度快
缺点:影响insert update的效率、占用磁盘空间
哪些列需要创建索引
•较频繁的作为查询条件字段应该创建索引
•select * from empwhere empno =1
•唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
•select * from empwhere sex = '男'
•更新非常频繁的字段不适合创建索引
•select * from empwhere logincount = 1
•不会出现在WHERE子句中字段不该创建索引:)
创建索引的方法
•ALTER TABLE emp ADD INDEX(empno);
•ALTER TABLE emp DROP INDEXempno;
•SHOW INDEXES FROM emp\G;
•主键
•唯一性约束
查询类型:
•PRIMARY :子查询中最外层查询
•SUBQUERY :子查询内层第一个SELECT,结果不依赖于外部查询
•DEPENDENTSUBQUERY:子查询内层第一个SELECT,依赖于外部查询
•UNION :UNION语句中第二个SELECT开始后面所有SELECT,
•SIMPLE
UNION RESULT UNION 中合并结EXPLAIN
SELECTempno,enameFROM empwhere empno =3
UNION
SELECT deptno,dnameFROM dept where deptno=4 \G;优化原则
•优化需要优化的Query
•定位优化对象性能瓶颈
•从Explain入手
•永远小结果集驱动大结果集#
•尽可能在索引中完成排序
•只取自己需要的Column
•仅仅使用最有效的过滤条件
•尽可能避免复杂的join和子查询
•查询细节信息
•
•No tables
Query语句中使用FROM DUAL 或不含任何FROM子句
•Using filesort
当Query中包含 ORDER BY 操作,而且无法利用索引完成排序,
• ImpossibleWHERE noticed after reading const tables: MYSQL Query Optimizer
•通过收集统计信息不可能存在结果
•Using temporary
•某些操作必须使用临时表,常见GROUP BY ; ORDER BY
•Using where
•不用读取表中所有信息,仅通过索引就可以获取所需数据;