联合索引

联合索引的创建原则

  • 使用次数较为频繁的放在最左端。(此时甚至可为其单独建立索引)
  • 联合索引存在“最左原则”。
  • 最左原则:以最左边的为起点,任意连续的索引都能匹配上。

下面使用具体的例子说明

索引图

如上,在asset_borrow_order表中添加如上的联合索引。


EXPLAIN SELECT * from asset_borrow_order WHERE user_phone = '13002398278' and created_at ='2019-02-14 17:26:49' and user_id = 895;
EXPLAIN SELECT * from asset_borrow_order WHERE user_phone = '13002398278' and user_id = 895 and created_at ='2019-02-14 17:26:49' ;
差异图

我们在这里调换顺序,发现联合索引仍然生效。

EXPLAIN SELECT * from asset_borrow_order WHERE user_phone = '13002398278' and created_at ='2019-02-14 17:26:49';  -- 1
EXPLAIN SELECT * from asset_borrow_order WHERE user_phone = '13002398278' and user_id =895 ; -- 2

EXPLAIN SELECT * from asset_borrow_order WHERE created_at = '2019-02-14 17:26:49' and user_id =895 ; -- 3
EXPLAIN SELECT * from asset_borrow_order WHERE user_id =895 and created_at = '2019-02-14 17:26:49'; -- 4

上述是联合索引其中的两个,通过分析我们得知1和2 是生效的,3和4索引是失效的。

EXPLAIN SELECT * from asset_borrow_order WHERE user_phone = '13002398278'; -- 5
EXPLAIN SELECT * from asset_borrow_order WHERE user_id =895 ; -- 6
EXPLAIN SELECT * from asset_borrow_order WHERE created_at = '2019-02-14 17:26:49'; -- 7

上述联合索引其中的一个,通过分析仅有5是生效的,6和7是无效的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一般在创建数据表的时候,就会根据表的业务属性,对查询比较频繁的字段建立索引,方便提高查询速度。如果该表存在多个字段...
    少博先生阅读 6,644评论 2 10
  • 前言 之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和面试官交流,...
    AI乔治阅读 1,992评论 3 9
  • 前言 之前看了很多关于MySQL索引的文章也看了《高性能MySQL》这本书,自以为熟悉了MySQL索引使用原理,入...
    PHP菜鸡阅读 3,433评论 0 1
  • 命名规则:表名_字段名 1、需要加索引的字段,要在where条件中 2、数据量少的字段不需要加索引 3、如果whe...
    cuiyao50阅读 306评论 0 0
  • 一、什么是联合索引 两个或更多个列上的索引被称作联合索引,联合索引又叫复合索引。对于复合索引:Mysql从左到右的...
    Ferrari1001阅读 50,927评论 2 13