MySQL學習筆記:組合索引-最左原則

surpass 發表於 2020-09-22

新建表

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
  `uname` varchar(100) NOT NULL DEFAULT '' COMMENT '姓名',
  `phone` char(11) NOT NULL DEFAULT '' COMMENT '電話',
  `emp_no` varchar(20) NOT NULL DEFAULT '' COMMENT '員工編號',
  `dept_id` int(4) NOT NULL DEFAULT '0' COMMENT '部門id',
  `pwd` varchar(255) NOT NULL DEFAULT '' COMMENT '密碼',
  `avt` varchar(255) NOT NULL DEFAULT '' COMMENT '頭像',
  PRIMARY KEY (`id`),
  KEY `index_user` (`dept_id`,`uname`,`phone`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

最左原則

  • where子句中欄位的順序不會影響索引的使用
    SELECT
      *
    FROM
      `user`
    WHERE
      uname = '5f686bb79ff03'
    AND dept_id = 91
    AND phone = '14097548200';

MySQL學習筆記:組合索引-最左原則

  • where子句中,只能按照索引欄位,從右向左依次擷取欄位,剩下的欄位依次作為有效索引
    KEY `index_user` (`dept_id`,`uname`,`phone`) USING BTREE
    可以直接用的有效索引有:(dept_id,uname,phone),(dept_id,uname),(dept_id)

MySQL學習筆記:組合索引-最左原則

(dept_id,phone)中phone是應該走不上索引的,但是當滿足MySQL的索引下推條件時,是可以走的。

MySQL學習筆記:組合索引-最左原則

本作品採用《CC 協議》,轉載必須註明作者和本文連結