1.我们日常所说的主键索引,其实就是聚簇索引(Clustered Index);主键索引之外,其他的都称之为非主键索引,非主键索引也被称为二级索引(Secondary Index),或者叫作辅助索引。
2.主键默认已有索引,不需要再手动填加。
3.单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上;用户可以在多个列上建立索引,这种索引叫做复合索引(也叫组合索引)。
4.索引的最左前缀匹配原则
KEY test_col1_col2_col3 on test(col1,col2,col3)
实际上建立了(col1)、(col1,col2)、(col1,col2,col3) 三个索引。
5.回表:先索引扫描,再通过ID去取索引中未能提供的数据,即为回表。减少回表则查询速度更快。
覆盖索引不需要回表。主键索引的叶子结点存储的是一行完整的数据。非主键索引的叶子结点存储的则是索引字段和主键值。当限制条件只有主键时就用到了主键索引,主键索引的B+树包含了所有的字段,不管输出哪些字段都不会回表。所以要想不发生回表要么限制条件只有主键,要么限制条件和输出字段都有索引。
如:select col1,col2,col3 from test where col1=1 and col2=2。
6.有几个索引,就有几个B+树
7.mysql会自行判断是否需要走索引。即有索引也不一定会用。效率优先。