索引和主键

索引的优点

索引的本质就是数据结构,索引往往以索引文件的形式存储在磁盘上。

主键索引、唯一索引、一般索引、hash索引(memory存储引擎支持)、聚簇索引、空间索引、全文索引(MyISAM支持)。

索引的优点主要有三个:

1)大大减少了服务器需要扫描的数据量

2)可以帮助服务器避免使用临时表和文件排序

3)可以将随机I/O变为顺序I/O

InnoDB支持聚簇索引,MyISAM不支持聚簇索引;

InnoDB的聚簇索引和主键索引是一样的;主键索引的页子结点中存储的都是索引值以及行记录;非聚簇索引页子结点里存储的都是记录的物理地址;

MyISAM主键索引和非主键索引叶子节点中存储的都是记录的物理地址;

为何要使用自增ID作为主键

1、int 相比varchar、char、text使用更少的存储空间,而且数据类型简单,可以节约CPU的开销,更便于表结构的维护

2、默认都会在主键上建立主键索引,使用整形作为主键可以将更多的索引载入内存,提高查询性能

3、对于InnoDB存储引擎而言,每个二级索引都会使用主键作为索引值的后缀,使用自增主键可以减少索引的长度(大小),方便更多的索引数据载入内存
4、可以使索引数据更加紧凑,在数据插入、删除、更新时可以做到索引数据尽可能少的移动、分裂页,减少碎片的产生(可以通过optimize table 来重建表),减少维护开销
5、在数据插入时,可以保证逻辑相邻的元素物理也相邻,便于范围查找

当然,使用自增int作为主键也不是百利无一害,在高并发的情况下也可能会造成锁的争用问题。