test
一级目录
| 字段 | 含义 | 备注 |
123123
1 function func1() 2 { 3 func2(); 4 } 5 6 function func2() 7 { 8 throw new Exception("get error"); 9 } 10 11 try { 12 func1(); 13 } catch (Exception $e) { 14 echo $e->getMessage(); 15 }
1 function func1() 2 { 3 func2(); 4 } 5 6 function func2() 7 { 8 throw new Exception("get error"); 9 } 10 11 try { 12 func1(); 13 } catch (Exception $e) { 14 echo $e->getMessage(); 15 }
function func1()
{
func2();
}
function func2()
{
throw new Exception("get error");
}
try {
func1();
} catch (Exception $e) {
echo $e->getMessage();
}
function func1()
{
func2();
}
function func2()
{
throw new Exception("get error");
}
try {
func1();
} catch (Exception $e) {
echo $e->getMessage();
}
12312312312
123我是引用啊
123123
二级目录
123213
三级目录
12321321
四级目录
123213
五级目录
123123
六级目录
12321312
一级目录
123123
二级目录
123213
三级目录
12321321
四级目录
123213
五级目录
123123
六级目录
12321312
一级目录
123123
二级目录
123213
三级目录
12321321
四级目录
123213
五级目录
123123
六级目录
12321312
一级目录
123123
二级目录
123213
三级目录
12321321
四级目录
123213
五级目录
123123
六级目录
12321312
1. 1231
2. 123123
explain字段解释
着重观察的字段:id、select_type、type、key、Extra
id:代表优先级 。id值越大,越先执行,id值相同,从上往下执行。
select_type:表示select类型。
SIMPLE:一个简单的查询,既没有使用到union,也没有使用到子查询。
PRIMARY:最外层的查询。union或者子查询的主查询。
UNION:UNION语句中第二个SELECT及其后的所有SELECT,第一个SELECT为PRIMARY。
DEPENDENT UNION:UNION语句中第二个SELECT及其后的所有SELECT,依赖于外部的查询。
UNION RESULT:UNION合并后的结果集。
SUBQUERY:子查询中的第一个SELECT,结果不依赖于外部查询。
DEPENDENT SUBQUEY:子查询中的第一个SELECT,结果依赖于外部查询。
DERIVED: 派生表的SELECT(子查询中的from子句)。
MATERIALIZED:具体化的子查询。
table:当前操作用到的是哪个表。
partitions:当前操作用到的是哪个分区。这个信息需要在使用explain的时候加上partitions关键字时才会展示出来。
type:表示MySQL在表中查找数据的方式,或者叫访问类型,以下对于type取值的说明从上往下性能由最好到最差。
system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL
一般来说,得保证查询至少达到range级别,最好能达到ref。
null:mysql不用访问表或者索引,直接就能够得到查询的结果。如:explain select 1;
system/const:单表中最多有一个匹配行,查询起来非常迅速,常见于根据primary key或者唯一索引unique index进行的单表查询。如:explain select * from user where id=1;另外,system属于const的特例,区别在于查询的表是一张系统表而已。
eq_ref:
使用条件:
1.使用主键索引或唯一索引(只能从参考表中筛选出一条记录)。注意:1)必须使用索引包含的所有列,而不能是部分列。2)唯一索引的值不能为null。
2.比较时只能使用=号。
如:
explain select * from user,class where user.id=class.id limit 10;
explain select * from user left join class on user.class_id=class.id limit 10;
ref:
使用条件:
1.使用最左前缀索引或者普通索引(可以从参考表中筛选出多行记录)。
2.比较时只能使用=或<=>号,这里的<=>是安全比较运算符。
如:
explain select * from user where class_id=1 limit 10;
explain select * from user,class where user.class_id=class.id limit 10;
explain select * from class left join user on class.id=user.class_id limit 10;
range:索引范围扫描,常见于<、<=、>、>=、between等操作符。如:explain select * from user where id>1;
index:全索引表扫描。扫描普通索引树的所有记录找到匹配行。
all:全表扫描。扫描主键索引树的所有记录找到匹配行。
possible_keys:表示查询时可能使用的索引。
key:表示实际使用的索引。
key_len:使用到索引字段的长度。在不损失精度的情况下,长度越短越好。key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。长度计算可以参考这里,单位:字节。
ref:引用了哪一列。
如:
rows:扫描数量。
Extra:额外信息。
Distinct:查找distinct值时会在找到第一个匹配值后就不再往下查找。
using filesort:使用了文件排序。
using tmporary:使用了临时表保存中间结果。常见于以下操作:order by、group by、子查询、连接。
using index:使用了覆盖索引。
using index condition:使用了索引下推(index condition pushdown/icp)。
using index for group-by:通过松散索引扫描来实现group by操作。

浙公网安备 33010602011771号