如何把网站上传到凡科,数码产品网站开发背景,教学资源库网站建设立项申报书,c 网站开发项目教程索引
索引是帮助数据库高效获取数据的排好序的数据结构。
有无索引时#xff0c;查询的区别
主要区别在于查询速度和系统资源的消耗。 查询速度#xff1a; 在没有索引的情况下#xff0c;数据库需要对表中的所有记录进行扫描#xff0c;以找到符合查询条件的记录#…索引
索引是帮助数据库高效获取数据的排好序的数据结构。
有无索引时查询的区别
主要区别在于查询速度和系统资源的消耗。 查询速度 在没有索引的情况下数据库需要对表中的所有记录进行扫描以找到符合查询条件的记录这个过程可能会非常耗时特别是对于大表来说。 如果有索引数据库可以通过索引快速定位到符合查询条件的记录大大减少了查询时间。 系统资源消耗 无索引时由于需要扫描整个表因此会占用大量的系统资源如CPU、内存等。 有索引时由于只需扫描索引所以系统资源的消耗相对较小。
注意索引并不是越多越好。过多的索引会增加数据库的空间开销同时也可能导致查询性能下降。 也会降低更新表的速度如对表进行INSERT、UPDATE、DELETE时效率降低
索引结构
常见的索引结构
二叉树
二叉树索引结构是一种基于排序二叉树的索引方法。树中每个节点的值大于其左子树中任意节点的值小于其右子树中任意节点的值。
优点
查找效率高特别是在数据量较大时查找性能的优势更为明显。
局限性
二叉树索引最理想的状态即主键插入构成的排序二叉树为完全二叉树即叶子节点都在最后一层这样二叉树的查询效率最高。如下图所示 但如果主键是顺序插入的则会出现一条单向链表也就是最极端的情况。 此时查询的情况就跟无索引时一样了需要通过遍历整列数据来得到查询结果
所以二叉树的局限性在于它的高度层次不可控影响因素高。
二叉树的缺点 顺序插入时会形成一个链表查询性能大大降低。 大数据量情况下层级较深检索速度慢。
红黑树
红黑树是一种自平衡的二叉查找树它通过一定的规则使得树保持大致平衡从而提高了查找效率。 二叉树改良但还是存在大数据量情况下层级较深检索速度慢的问题。
B-Tree
B-Tree是一种自平衡的多路查找树。 其中B是Balanced 平衡的意思节点最大的孩子数目m称为B-Tree的阶order。 但是由于每个节点同时存储了数据和索引所以每个节点所能存储的数据较少浪费了一定的存储空间。 特点
在B-Tree中非叶子节点和叶子节点都会存放数据。在B-Tree中每个内部节点非叶子节点存储的key数量等于它的阶数减一对应的指针数量等于它的阶数.一旦节点存储的key数量到达阶数就会裂变中间元素向上分裂。
BTree
BTree和B-Tree十分类似。
BTree的特点在于
所有的数据都会出现在叶子节点。叶子节点形成一个单向链表。非叶子节点仅仅起到索引数据作用具体的数据都是在叶子节点存放的。
所以BTree更有优势
更好的磁盘读写性能更好的范围查找性能
优化
在MySQL中索引数据结构对经典的BTree进行了优化这种优化主要是增加了指向相邻叶子节点的链表指针形成了带有顺序指针的BTree。
提高区间访问的性能当在查找某个范围内的数据时可以直接通过这些顺序指针快速跳转到下一个叶子节点而不必逐级向上查找。
Hash
Hash索引是一种基于哈希表实现的索引结构。其基本思想是对于每一行数据存储引擎都会对所有的索引列计算一个哈希码hash code将所有的哈希码存储在索引中同时在哈希表中保存指向每个数据行的指针。
在哈希索引中数据的存储和查找都是基于哈希函数进行的。哈希函数可以将任意长度的输入也叫做“键”通过散列算法变换成固定长度的散列值也叫做“哈希值”。这个哈希值就是我们在哈希索引中用来定位数据的地址。
当我们需要查找某一行的数据时只需要根据这一行的主键值计算出相应的哈希值然后在哈希表中查找这个哈希值所对应的指针再通过这个指针就可以快速找到这一行的数据。因此哈希索引的查找效率是非常高的基本上可以达到O(1)的时间复杂度。 特点
Hash索引只能用于对等比较(in)不支持范围查询between …无法利用索引完成排序操作查询效率高通常(不存在hash冲突的情况)只需要一次检索就可以了效率通常要高于Btree索引