zoukankan      html  css  js  c++  java
  • MySQL最左前缀索引

    # 建立组合索引
    CREATE TABLE t3
    (
        id    INT NOT NULL,
        username CHAR(30) NOT NULL,
        age  INT NOT NULL,
        info VARCHAR(255),
        INDEX MultiIdx(id, username, info(100)) # 组合索引遵循最左前缀原则
    );
    
    # 走索引id和username的组合索引
    EXPLAIN SELECT * FROM t3 WHERE id=1 AND username='zs'G;
    
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: t3
       partitions: NULL
             type: ref
    possible_keys: MultiIdx
              key: MultiIdx
          key_len: 94
              ref: const,const
             rows: 1
         filtered: 100.00
            Extra: NULL
    1 row in set, 1 warning (0.01 sec)
    
    # 由于不存在username,因此只对id进行索引
    EXPLAIN SELECT * FROM t3 WHERE id=1 AND info='man'G; 
    
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: t3
       partitions: NULL
             type: ref
    possible_keys: MultiIdx
              key: MultiIdx
          key_len: 4
              ref: const
             rows: 1
         filtered: 50.00
            Extra: Using where
    1 row in set, 1 warning (0.01 sec)
    
    # 由于最左前缀id不存在,因此不走索引MultiIdx
    EXPLAIN SELECT * FROM t3 WHERE username='zs' AND info='man'; 
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: t3
       partitions: NULL
             type: ALL
    possible_keys: NULL
              key: NULL
          key_len: NULL
              ref: NULL
             rows: 2
         filtered: 50.00
            Extra: Using where
    1 row in set, 1 warning (0.01 sec)
    
    # 即使索引组合是乱序,只要存在最左前缀MySQL就会对其进行索引组合优化
    EXPLAIN SELECT * FROM t3 WHERE username='zs' AND id=1 AND info='man'; 
    
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: t3
       partitions: NULL
             type: ref
    possible_keys: MultiIdx
              key: MultiIdx
          key_len: 397
              ref: const,const,const
             rows: 1
         filtered: 100.00
            Extra: Using where
    1 row in set, 1 warning (0.01 sec)
    
  • 相关阅读:
    SVN使用svn+ssh协议连接服务器时重复提示输入密码 解决办法
    SQL Server 2008 排序函数 ROW_NUMBER和RANK 用法总结
    数据表基础知识(1)
    数据库基本概念
    String函数
    委托
    递归算法
    关于C#引用类型赋值
    BackgroundWorker的应用
    DevExpress_Report 主从报表绑定数据,分页打印
  • 原文地址:https://www.cnblogs.com/code-duck/p/14471686.html
Copyright © 2011-2022 走看看