为什么要有索引?

  • 加快数据检索速度

注意什么情况不走索引(基本上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》