聚集索引和非聚集索引
数据库中B+树索引可以分为聚集索引和非聚集索引(辅助索引)
聚集索引
每张表只有一个聚集索引,且是建立在主键上面的。
主键索引
在InnoDB存储引擎中,每张表都有个主键,如果在创建表时没有显式地定义主键,则InnoDB存储引擎会按如下方式选择或创建主键
首先判断表中是否存在非空的唯一索引,如果有,则该列即为主键
如果不符合上述条件,InnoDB存储引擎自动创建一个6字节大小的指针。
联合索引
联合索引在表上的多个列进行索引。
1.联合索引
创建如下的表,并创建一个联合索引(a,b)
CREATE TABLE t(
a INT,
b INT,
PRIMARY KEY (a),
KEY idx_a_b (a,b)
)ENGINE=INNODB
联合索引的B+树如下。通过叶子节点可以逻辑上顺序的读出所有数据,(1,1),(1,2),(2,1),(2,4),(3,1),(3,2)
2.能够使用联合索引的情况
①全匹配
select * from t where a=xxx and b=xxx
②最左前缀匹配
对于单个的a列,也可以用到(a,b)联合索引
select * from t where a=xxx
③不能使用联合索引
叶子节点上b的值为1,2,1,4,1,2,显然不是排序的。
select * f