zoukankan      html  css  js  c++  java
  • [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 |
    +----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
  • 相关阅读:
    Bootstrap学习笔记
    鼠标画矩形openCV
    开关openCV
    openCV图像形态学
    Android自定义ListView的Item无法响应OnItemClick的解决办法
    0-1背包问题
    java实现矩阵连乘的动态规划
    java 实现排序
    微信小程序--箭头表达式
    微信小程序--navigator url 跳转失效
  • 原文地址:https://www.cnblogs.com/taoshihan/p/13667943.html
Copyright © 2011-2022 走看看