zoukankan      html  css  js  c++  java
  • mysql索引命中规则

    转于:https://blog.csdn.net/claram/article/details/77574600

    首先明确:为什么要用联合索引?

    对于查询语句“SELECT E.* FROM E WHERE E.e1=1 AND E.e3=2”涉及到两列,这个时候我们一般采用一个联合索引(e1, e3);而不用两个单列索引,这是因为一条查询语句往往应为mysql优化器的关系只用一个索引,就算你有两个索引,他也只用一个;在只用一个的基础之上,联合索引是会比单列索引要快的;

    下面讲讲联合索引的使用规则和哪些情况会命中不了联合索引


    示例如下。首先创建表:
    CREATE TABLE E (e1 INT, e2 VARCHAR(9), e3 INT, PRIMARY KEY(e1, e3));
    这样就建立了一个联合索引:e1,e3

    测试数据

    INSERT INTO E
    (e1, e2, e3)
    VALUES(1, 'aa', 2);


    触发联合索引是有条件的:
    1、使用联合索引的全部索引键,可触发索引的使用。
    例如:SELECT E.* FROM E WHERE E.e1=1 AND E.e3=2

    2、使用联合索引的前缀部分索引键,如“key_part_1 <op>常量”,可触发索引的使用。
    例如:SELECT E.* FROM E WHERE E.e1=1

    3、使用部分索引键,但不是联合索引的前缀部分,如“key_part_2 <op>常量”,不可触发索引的使用。
    例如:SELECT E.* FROM E WHERE E.e3=1

    4、使用联合索引的全部索引键,但索引键不是AND操作,不可触发索引的使用。
    例如:SELECT E.* FROM E WHERE E.e3=2 OR E.e1=1

    以上通过explain测试即可看出效果

    有追求,才有动力!

    向每一个软件工程师致敬!

    by wujf

    mail:921252375@qq.com

  • 相关阅读:
    宏定义函数 字符串 多行书写采用换行
    new / delete && new[] / delete[]
    删除vector中的重复元素
    AES加密算法通用版本
    字符串匹配KMP算法详解
    超外差【整理】
    LTE PDCCH 盲检测
    PDCCH学习
    PDCCH format 与传输模式之间的关系
    LTE测量事件主要有下面几种:Event A1、Event A2、Event A3、Event A4、Event A5、Event B1、Event B2
  • 原文地址:https://www.cnblogs.com/wujf/p/9176840.html
Copyright © 2011-2022 走看看