为什么要用自增主键作为索引,而不用UUID作索引呢?
主键索引(聚集索引)
[主键索引B+树图示]
索引查找
索引查找从顶层节点开始查找,通过key值,也就是主键的值进行比较,最终定位到存储数据的叶子节点上面,从叶子节点取出响应的数据。
第一点、主键的比较,是整形的 1 < 2 ,还是UUID的比值,哪个效率更高些呢? 显然,整形效率更高些
第二点、整形的key值相对于UUID的key值占用内存更小,同一节点,能存放的索引就更多些。
索引维护
[页分裂过程]
图结论:
1
自增id的情况的,主键索引在新增数据时,会往索引尾部插入,这样只会往节点后面维护索引。
好处: 索引key比值简单,效率高
key值从小到大,不会对已有的页产生影响
2
uuid的情况下,由于uuid的key值大小不确定性,所以可能会对已经插满的节点中,打乱当前节点的顺序,重新插入当前值。
没有自增id主键的情况,Mysql是如何处理的
如果没有创建主键,则mysql会选择列中有唯一性约束的列作为聚集索引的key值来创建聚集索引 如果列中没有唯一的字段,则会隐式的维护一个key值来保证聚集索引的创建。