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 |
    +----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
  • 相关阅读:
    JS变量的作用域
    使用jquery修改css中带有!important的样式属性
    js异步加载的三种解决方案
    js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 # )
    【翻译】MongoDB指南/CRUD操作(二)
    【翻译】MongoDB指南/CRUD操作(一)
    【翻译】MongoDB指南/引言
    深入浅出UML类图(一)
    让thinkphp 5 支持pathinfo 的 nginx ,去掉index.php
    linux 常用命令
  • 原文地址:https://www.cnblogs.com/taoshihan/p/13667943.html
Copyright © 2011-2022 走看看