• 联合索引只用单字段时是否用到索引


    多字段的联合索引在查询单个字段时是否可以用到索引

    1、联合索引是由多个字段组成的索引。

    2、查询时使用联合索引的一个字段,如果这个字段在联合索引中所有字段的第一个,那就会用到索引,否则就无法使用到索引。

    3、联合索引IDX(字段A,字段B,字段C,字段D),当使用字段A查询时,索引IDX就会使用到;如果仅使用字段B或字段C或字段D查询,则索引IDX都不会用到。  

    这个规则在oracle和mysql数据库中均成立。

    如果你经常要用到多个字段的多条件查询,可以考虑建立联合索引,一般是除第一个字段外的其它字段不经常用于条件筛选情况,比如说a,b 两个字段,如果你经常用a条件或者a+b条件去查询,而很少单独用b条件查询,那么可以建立a,b的联合索引。如果a和b都要分别经常独立的被用作查询条件,那还是建立多个单列索引

    索引的定义是 快速、高效地查询数据的数据结构。

    索引的本质就是 数据结构。 可以理解为 排好序的、快速查找的数据结构。

    mysql 中,索引有 单列索引,也有 多列索引 。
    (1)单列索引 就是常用的一个列字段的索引,常见的索引。
    (2)多列索引 就是含有多个列字段的索引 。

    多列索引,也叫 多列组合索引复合索引 、联合索引

    多列索引

     

     示例:

    where a=3  and b=45 and c=5  # 这种三个索引顺序使用中间没有断点,全部发挥作用;
    where a=3  and c=5           # 这种情况下,b就是断点,a有效,c无效
    where b=3  and c=4           # 这种情况下,a就是断点,在a后面的索引全部无效
    where b=45 and c=5 and a=3  # 这个跟第一个一样,全部有效, abc跟书写的顺序无关

    注意, ( a ,b ,c ) 索引 和 ( a ,c ,b ) 是不同的索引

    (1) select * from mytable where a=3 and b=5 and c=4;
    # abc 三列都使用索引,而且都有效
    
    (2) select * from mytable where  c=4 and b=6 and a=3;
    # mysql没有那么笨,不会因为书写顺序而无法识辨索引。
    # where里面的条件顺序在查询之前会被mysql自动优化,效果跟上一句一样。
    
    (3) select * from mytable where a=3 and c=7;
    # a 用到索引,sql中没有使用 b列,b列中断,c没有用到索引
    
    (4) select * from mytable where a=3 and b>7 and c=3;
    # a 用到索引,b也用到索引,c没有用到。
    # 因为 b是范围索引,所以b处断点,复合索引中后序的列即使出现,索引也是无效的。
    
    (5) select * from mytable where b=3 and c=4;
    # sql中没有使用a列, 所以b,c 就无法使用到索引
    
    (6) select * from mytable where a>4 and b=7 and c=9;
    # a 用到索引, a是范围索引,索引在a处中断, b、c没有使用索引
    
    (7) select * from mytable where a=3 order by b;
    # a用到了索引,b在结果排序中也用到了索引的效果。前面说过,a下面任意一段的b是排好序的
    
    (8) select * from mytable where a=3 order by c;
    # a 用到了索引,sql中没有使用 b列,索引中断,c处没有使用索引,在 Extra列 可以看到 filesort
    
    (9) select * from mytable where b=3 order by a;
    # 此sql中,先b,后a,导致 b=3 索引无效,排序a也索引无效。
  • 相关阅读:
    create mysql database
    mysql install
    mac os vim 乱码
    Three.js 基础入门
    Echarts修改提示框及自定义提示框内容
    Echarts3实例 南丁格尔饼图
    南丁格尔玫瑰图3
    Echarts实战案例代码:饼图pie之南丁格尔玫瑰图rose实现代码
    记录下vue 中引用echarts 出现 "TypeError: Cannot read property 'getAttribute' of undefined"问题
    echarts 中国地图,根据省份数值高低改变省份颜色深浅
  • 原文地址:https://www.cnblogs.com/wangcheng9418/p/12585127.html
Copyright © 2020-2023  润新知