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 |
    +----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
  • 相关阅读:
    嵌入式MicroFlighter 之STM32F103学习——编写第一个STM32程序
    嵌入式stm32学习方法
    嵌入式stm32学习之路(led流水灯工程)
    嵌入式stm32 LED 流水灯剖析(库函数版)
    Swift快速入门(一)第一个Swift程序
    从库函数方向入门stm32的个人建议
    嵌入式STM32使用PWM控制LED呼吸灯效果
    嵌入式STM32学习笔记之按键查询方式控制led灯的亮灭
    从零写一个编译器(完结):总结和系列索引
    从零写一个编译器(十三):代码生成之遍历AST
  • 原文地址:https://www.cnblogs.com/taoshihan/p/13667943.html
Copyright © 2011-2022 走看看