查看explain中的key_len判斷究竟用了哪個索引

藏色散人
發布: 2020-03-30 08:51:37
轉載
1997 人瀏覽過

查看explain中的key_len判斷究竟使用了哪個索引?

在一張表裡有多個索引, 我們where欄位裡條件有多個索引的值, 那麼究竟使用的哪一個呢?

推薦:《 mysql影片教學

我們可以用explain來查看, 其中的key_len欄位可以看得出來

 

例如下面這本sql

explain select * from ent_calendar_diary where email='xxxx' and diary_id=1784;
 
+----+-------------+--------------------+------------+-------+-------------------------+---------+---------+-------+------+----------+-------+
| id | select_type | table              | partitions | type  | possible_keys           | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+--------------------+------------+-------+-------------------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | ent_calendar_diary | NULL       | const | PRIMARY,idx_email_stime | PRIMARY | 4       | const |    1 |   100.00 | NULL  |
+----+-------------+--------------------+------------+-------+-------------------------+---------+---------+-------+------+----------+-------+
登入後複製

 

 

possible_keys裡面有兩個索引欄位, 但是看key_len  是4個位元組 

查看explain中的key_len判斷究竟用了哪個索引

備註,key_len 只指示了WHERE中用於條件過濾時被選中的索引列,是不包含ORDER BY/GROUP BY 

int類型並且not null 是4個位元組, 因此上面的sql是使用的主鍵索引

 

explain select * from ent_calendar_diary where email='xxxx';
+----+-------------+--------------------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
| id | select_type | table              | partitions | type | possible_keys   | key             | key_len | ref   | rows | filtered | Extra |
+----+-------------+--------------------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | ent_calendar_diary | NULL       | ref  | idx_email_stime | idx_email_stime | 767     | const |  111 |   100.00 | NULL  |
+----+-------------+--------------------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
登入後複製

 

這個是767個字節, varchar(255)  not null   255 * 3 2剛好符合, 因此是使用的email

# ###
CREATE TABLE `ent_calendar_diary` (
`diary_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL,
`title` varchar(100) NOT NULL,
`summary` varchar(500) NOT NULL DEFAULT '',
`stime` bigint(11) NOT NULL DEFAULT '0',
`ctime` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`diary_id`),
KEY `idx_email_stime` (`email`,`stime`)
) ENGINE=InnoDB AUTO_INCREMENT=1809 DEFAULT CHARSET=utf8
登入後複製

以上是查看explain中的key_len判斷究竟用了哪個索引的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:cnblogs.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板