作为程序员一定要保持良好的睡眠,才能好编程

MYSQL 用 explain 语句判断select查询是否使用了索引

发布时间:2019-04-03





我有一个 zje 表

我先用一个普通的 select语句,用explain解析,看看有什么显示:

explain select * from zje;

2.jpg

主要关注的是,type 和 key:

type = ALL :表示全表扫描

type = const :表示通过索引一次就找到了


key = NULL:表示没有使用索引

key = primary :表示使用了主键

key一般=使用了主键/索引的名字


下面的图是使用了索引的:

select * from zje where math<60;

1.jpg

其中 key = math的 math就是索引名



假设有一张表,里面有一个复合索引:

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `gongzi` int(10) unsigned DEFAULT NULL,
  `class_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `iname` (`name`),
  KEY `classname` (`class_id`,`name`)
) ENGINE=MyISAM AUTO_INCREMENT=41 DEFAULT CHARSET=utf8 |


查询里面数据有

msyql1.png


复合索引,遵循从左到有依次的原则。



explain select * from user where class_id=1 \G

mysql2.png




explain select * from user where class_id>1 \G

mysql4.png



第一个搜索条件必须是等于,不能使用区间范围  大小啊,否则索引失效。


复合索引不能使用区间,也不能使用不等于


mysql> explain select * from user where class_id!=1 \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: user
         type: ALL
possible_keys: classname
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 40
        Extra: Using where