当使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN或者IN操作符,用常量比较关键字列时,可以使用range
- mysql> explain select * from test where bnet_id > 1000 and bnet_id < 10000;
- +----+-------------+-------+-------+---------------+----------+---------+------+------+-----------------------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+-------+-------+---------------+----------+---------+------+------+-----------------------+
- | 1 | SIMPLE | test | range | idx_bnet | idx_bnet | 9 | NULL | 1 | Using index condition |
- +----+-------------+-------+-------+---------------+----------+---------+------+------+-----------------------+
前提条件为bnet_id列有索引
index: 在进行统计时非常常见,此联接类型实际上会扫描索引树
- mysql> explain select count(*) from test;
- +----+-------------+-------+-------+---------------+----------+---------+------+-------+-------------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+-------+-------+---------------+----------+---------+------+-------+-------------+
- | 1 | SIMPLE | test | index | NULL | idx_bnet | 9 | NULL | 68505 | Using index |
- +----+-------------+-------+-------+---------------+----------+---------+------+-------+-------------+
all: 对于每个来自于先前的表的行组合,进行完整的表扫描,通常可以增加更多的索引而不要使用ALL,使得行能基于前面的表中的常数值或列值被检索出
- mysql> explain select * from test where create_time = '0000-00-00 00:00:00';
- +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
- | 1 | SIMPLE | test | ALL | NULL | NULL | NULL | NULL | 68505 | Using where |
- +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
5、possible_keys
possible_keys是指在这个SQL中,mysql可以使用这个索引去辅助查找记录,当查询涉及到的字段,都会被列出,但不一定被查询使用.若为空则表示没有可以使用的索引,此时可以通过检查where语句看是否可以引用某些列或者新建索引来提高性能。
6、key(重要)
key列显示的是当前表实际使用的索引,如果没有选择索引,则此列为null,要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX
7、key_len
key_len列显示MySQL决定使用的键长度。如果KEY键是NULL,则长度为NULL。在不损失精确性的情况下,长度越短越好
key len的长度还和字符集有关,latin1一个字符占用1个字节,gbk一个字符占用2个字节,utf8一个字符占用3个字节。key_len的计算法方法:
key_len只指示了where中用于条件过滤时被选中的索引列,是不包含order by或group by这一部分被选中的索引列
8、ref
ref列用来显示使用哪个列或常数与key一起从表中选择相应的行。它显示的列的名字(或const),此列多数时候为null
9、rows
rows列显示的是mysql解析器认为执行此SQL时必须扫描的行数。此数值为一个预估值,不是具体值,通常比实际值小
10、filtered
此参数为mysql 5.7 新加参数,指的是返回结果的行数所占需要读到的行(rows的值)的比例
对于使用join时,前一个表的结果集大小直接影响了循环的行数
11、extra(重要)
extra表示不在其他列并且也很重要的额外信息 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|