索引优劣势
优势
- 类似大学图书馆建书目录索引,提高数据检索的效率,降低数据库的IO成本。
通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗。
劣势
索引也是一张表,该表保存了主键与索引字段,并指向试题表的记录,所以索引列也是要占用空间的。
- 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行insert、update、delete。因为更新表时,mysql不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,调整因为更新所带来的键值变化后的索引信息。
索引只是提高效率的一个因素,如果存在大数据量的表,就需要花时间研究建立最优秀的索引。
索引分类
单值索引
唯一索引
复合索引
索引数据结构
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
二叉树
- 红黑树
- Hash表
-
B-Tree
叶节点具有相同的深度,叶节点的指针为空。
- 所有索引元素不重复。
- 节点中的数据索引从左到右递增排列。
B+Tree(mysql底层索引)
- 非叶子节点不存储data,只存储索引(冗余),可以放更多的索引。
- 叶子节点包含所有的索引字段。
- 叶子节点用指针连接,提高区间访问的性能。
