若使用二叉树时,当数据出现单边递增或单边递减,则形成像链表一样的结构,树高度则会越来越高,从而导致磁盘IO次数增加; 若使用红黑树(本质也是二叉树-二叉平衡树)时,当出现大数据量如500w甚至1000w,红黑树的高度是不是会随着数据量而增长,若查询的数据又刚好在树最底层,那查询的磁盘IO至少是树的高度; 若使用Hash时,很多时候Hash索引查询是比B+树更高效,但是可能出现Hash冲突并且不支持范围查询 若使用B树,每个叶子节点上都带有data域,mysql查询(show global status like 'innodb_page_size')可以知道每个叶子节点默认大小是16KB, 而B+是B树的变种,每个叶子节点上存放着冗余索引,在树的最底层为data域,并且形成链表。同为16KB大小,B+树存放的索引可以更多(即,树的宽度更宽,降低了树的高度,磁盘IO次数也就降低了)
mylsam:非聚集,数据文件分为三种,frm(存放表结构)、索引文件(存放索引)、数据文件(存放索引),表结构底层存的是数据指针 查询数据先查询索引文件,获取数据在索引上的存放的磁盘上的地址,再通过地址去数据文件获取对应数据(需要回表操作) innodb:聚集,数据文件分为两种,frm(存放表结构)、idb(数据&索引),表结构底层存的是数据指针&数据记录 通过索引文件直接查询数据(当出现二级索引也是需要回表操作)
若不加,数据库需要从数据中找出一列唯一数据
整型占用空间较小,查询效率也快(相比于如,UUID)