详谈数据库索引
Posted kma-3
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详谈数据库索引相关的知识,希望对你有一定的参考价值。
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。
1、索引类型有:B树索引、哈希索引、空间数据索引(R树)、全文索引。
常见的索引结构有:哈希索引和B+树索引
1)哈希,例如HashMap,查询/插入/修改/删除的平均时间复杂度都是O(1);
2)B树,查询/插入/修改/删除的平均时间复杂度都是O(lg(n));
对于大多数的mysql引擎都是B树索引结构,虽然哈希索引结构检索速度能够达到O(1)但是仅限于查询单个记录,对于大范围内的查询、排序、分组、比较等查询哈希结构就退化为O(n),而对于B树结构仍然可以保持O(lg(n))。
2、对于树形结构索引可以对比几种不一样的树形结构:二叉树、B树、B+树。
1)二叉树
- 因为一棵深度为k,最多有2^k-1个节点,所以当数据量大的时候,树的高度会比较高,数据量大的时候,查询会比较慢;
- 由于二叉树自身结构,每个节点只存储一个记录,可能导致一次查询有很多次磁盘IO;
2)B树
- 不再是二叉搜索,而是m叉搜索;
- 叶子节点,非叶子节点,都存储数据;
- 中序遍历,可以获得所有节点;
- 由于是m分叉的,高度能够大大降低,能够极大减少检索时间;
- 每个节点可以存储j个记录,利用局部性原理每一次读取磁盘数据能够将相近的数据全部读取出来,极大减少磁盘IO;
3)B+树
B+树是B树的变形,仍然是m叉搜索树,可以更加适合作为索引结构。
- 跟B树不一样的是非叶子节点不再存储数据,数据只存储在同一层的叶子节点上,所以B+树中根到每一个节点的路径长度相同。
- 叶子之间,增加了链表,获取所有节点,不再需要中序遍历;
- 范围查找,定位min与max之后,中间叶子节点,就是结果集,不用中序回溯,这个在范围查询在SQL中用得很多,这是B+树比B树最大的优势。
- 叶子节点存储实际记录行,记录行相对比较紧密的存储,适合大数据量磁盘存储;
- 非叶子节点,不存储实际记录,而只存储记录的KEY的话,那么在相同内存的情况下,B+树能够存储更多索引;
3、Mysql常用的两个引擎InnoDB和MyISAM都使用B+索引的差异
1)MyISAM引擎
以上是关于详谈数据库索引的主要内容,如果未能解决你的问题,请参考以下文章
SQL SERVER数据库 唯一索引 非唯一索引 聚集索引 非聚集索引 之间区别
数据库表索引:普通索引唯一性索引全文索引多列索引隐藏索引删除索引
数据库基础:讲解MySQL索引的概念及数据库索引的应用[2]
Pandas中xs()函数索引复合索引数据的不同切面数据(索引复合索引中需要的数据):索引列复合索引中的一个切面索引行复合索引中的一个切面