数据库索引
为什么要有索引?
- 加快数据检索速度
注意什么情况不走索引(基本上where 字段 = 的都走索引)
!=
>/<修饰符后面的所有字段
like
%在前面不走索引,在后面走索引
所以A走索引、B不走索引A:select * from student where 'name' like '王%' B:select * from student where 'name' like '%小' ···
索引列计算(如where age + 1 = 2)
聚簇(如innodb)/非聚簇(如myisam)索引
- 聚簇索引就是数据和索引放一起(找到索引的时候也就找到了数据),非聚簇索引则是分开存(找到索引,然后由索引找到数据)
- 聚簇索引只有一个,默认是主键,但不代表主键就一定是聚簇索引
- 由图可得
- 左边(聚簇索引)的主键索引是在节点上直接存放数据(辅助键索引即非主键,则存放指向主键,然后主键则参考主键索引
- 右边(非聚簇索引)的主键索引和辅助键索引则是索引和数据分开放,节点统一放索引,去指向统一存放数据的地方
- 所以!Innodb用的是b+树,底层就是实现了聚簇索引(将数据放到叶子结点,b+树的特性就是所有数据都是在叶子结点,所以……自行脑补)
https://www.cnblogs.com/wwxzdl/p/11116446.html
https://www.cnblogs.com/ExMan/p/10385554.html
https://www.cnblogs.com/wenxiaofei/p/9853682.html
本地的《聚簇索引和非聚簇索引.docx》