所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找。而用的最多,并且是mysql默认的就是二叉树算法 BTREE,通过BTREE算法建立索引的字段,比如扫描20行就能得到未使用BTREE前扫描了2^20行的结果,具体的实现方式后续本博客会出一个算法专题里面会有具体的分析讨论;
Explain优化查询检测
EXPLAIN可以帮助开发人员分析SQL问题,explain显示了mysql如何使用索引来处理select语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句.
使用方法,在select语句前加上Explain就可以了:
Explain select * from blog where false; |
mysql在执行一条查询之前,会对发出的每条SQL进行分析,决定是否使用索引或全表扫描如果发送一条select * from blog where falseMysql是不会执行查询操作的,因为经过SQL分析器的分析后MySQL已经清楚不会有任何语句符合操作;
Example
mysql> EXPLAIN SELECT `birday` FROM `user` WHERE `birthday` < "1990/2/2"; |
-- 结果:
id: 1 |
select_type: SIMPLE -- 查询类型(简单查询,联合查询,子查询)
select_type
simple 简单select(不使用union或子查询) primary 最外面的select union union中的第二个或后面的select语句 dependent union union中的第二个或后面的select语句,取决于外面的查询 union result union的结果。 subquery 子查询中的第一个select dependent subquery 子查询中的第一个select,取决于外面的查询 derived 导出表的select(from子句的子查询)新闻热点
疑难解答