MySQL - InnoDB主键索引、普通索引、唯一索引、联合索引
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL - InnoDB主键索引、普通索引、唯一索引、联合索引相关的知识,希望对你有一定的参考价值。
参考技术A 主键一般有几种选择:一般DBA会推荐InnoDB表必须建主键,而且推荐使用整型的自增主键。
三种选择的优先级是 自增id > 业务整型字段 > UUID。
如果使用UUID作为主键,那么B+树的聚集索引的key就是UUID,UUID通常会比整型字段要长,而且字符串的比较是需要逐个字节比较,所以得出两个缺点
比起自增id,虽然都是整型,但是业务字段有可能不是按顺序插入到表,考虑下图。
此时要插入索引值为4的节点,而B+树每页最多存放两个节点,插入4节点后,树变为
B+树特点是,所有节点从左右往右排好序,自增id插入B+是有序的,只会在节点放满了之后,才会新增一个页去存放,比起非自增id,会减少页分裂次数,提高性能。
对非主键进行索引,就是普通索引。
与聚集索引一样,每个普通索引建立后,会用一个B+树进行维护,但是叶子节点并非存储索引对应行的所有记录,而是只存储了主键值,此时得到主键值后,再回到聚集索引上查找一次,即可得到数据记录,即回表。
这个不带行数据完整信息的索引,就叫二级索引(secondary index),也叫辅助索引。
对多个字段同时建索引,就是联合索引。
当查询条件同时涉及多个字段,就可以使用联合索引。
联合索引会根据字段的出现顺序在B+树中排好序,例如先入name排序,当name相同时就使用age,直到比较出大小为止。 利用这个特性,可以使用最左前缀原则优化SQL。
mysql数据库相关总结
数据库引擎innodb和MyISAM的区别
MyISAM和InnoDB都使用B+树来实现索引:
-
MyISAM的索引与数据分开存储
-
MyISAM的索引叶子存储指针,主键索引与普通索引无太大区别
-
InnoDB的聚集索引和数据行统一存储
-
InnoDB的聚集索引存储数据行本身,普通索引存储主键
-
InnoDB一定有且只有一个聚集索引
参考文章:https://blog.csdn.net/u8AHNh95ix6lUC/article/details/82112319
InnoDB建议使用趋势递增整数作为PK,而不宜使用较长的列作为PK
以上是关于MySQL - InnoDB主键索引、普通索引、唯一索引、联合索引的主要内容,如果未能解决你的问题,请参考以下文章