2020年9月14日星期一

[MySQL] 利用explain查看sql语句中使用的哪个索引

字段类型是:
`enterpriseId` int(10) unsigned DEFAULT NULL,
`email` char(255) NOT NULL DEFAULT '',
表的索引是:
UNIQUE KEY `emailent` (`email`,`enterpriseId`),
KEY `edf` (`enterpriseId`,`departId`,`flag`),

有这么两条sql语句,分别表现是:

explain select email from email where enterpriseId=23684 and (email like 'aaa%');+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra  |+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+| 1 | SIMPLE  | email | ref | emailent,edf | edf | 5  | const | 6 | Using where |

 


看到key_len的长度是5 ,可以知道使用的是edf这个索引 , 因为edf索引中的enterpriseId是int类型4个字节 ,默认null 加1个字节,总共5个字节
也就是先使用enterpriseId查到索引,在索引中使用where过滤数据

explain select email from email where enterpriseId=23684 and (email like 'aaas%');+----+-------------+-------+-------+---------------+----------+---------+------+------+--------------------------+| id | select_type | table | type | possible_keys | key  | key_len | ref | rows | Extra     |+----+-------------+-------+-------+---------------+----------+---------+------+------+--------------------------+| 1 | SIMPLE  | email | range | emailent,edf | emailent | 770  | NULL | 2 | Using where; Using index |+----+-------------+-------+-------+---------------+----------+---------+------+------+--------------------------+

 


在like的时候比上面多了一个字符,这个时候的索引情况是key_len是770,可以知道使用的是emailent这个索引,因为这个的索引长度是
255*3+5=770 varchar是255个字符,utf8下是*3, 加上int 5个字节

 

like两边都有%的情况,只会使用第一个条件的edf索引

mysql> explain select * from email where enterpriseId=23684 and (email like '%shihanasas%');+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra  |+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+| 1 | SIMPLE  | email | ref | edf   | edf | 5  | const | 6 | Using where |+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+

 

[MySQL] 利用explain查看sql语句中使用的哪个索引美国Newegg招商沙龙交流会马帮ERP工具讲解coles暴利的奢侈品电商利润下滑后该何去何从?非洲最大电商平台Jumia加纳(Ghana)站点正式开放国际业务!BAP 二次审核注意事项为加大出口竞争力,印度提高黄金白银珠宝出口的关税退税率!亚马逊引流策略集锦

没有评论:

发表评论