码迷,mamicode.com
首页 > 数据库 > 详细

数据库索引原理及优化

时间:2019-06-20 12:31:50      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:结束   功能   特定   数据   linear   时间   否则   数据库   大于   

索引的本质

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。

常见的查询算法

我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。那么有哪些查询算法可以使查询速度变得更快呢?

顺序查找(linear search )

最基本的查询算法当然是顺序查找(linear search),也就是对比每个元素的方法,不过这种算法在数据量很大时效率是极低的。

(1)数据结构:有序或无序队列

(2)复杂度:O(n)

二分查找(binary search)

比顺序查找更快的查询方法应该就是二分查找了,二分查找的原理是查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。

(1)数据结构:有序数组

(2)复杂度:O(logn)

二叉排序树查找

二叉排序树的特点是:

若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

它的左、右子树也分别为二叉排序树。

搜索的原理:

b是空树,则搜索失败,否则:

x等于b的根节点的数据域之值,则查找成功;否则:

x小于b的根节点的数据域之值,则搜索左子树;否则:查找右子树

数据结构:二叉排序树

时间复杂度: O(log2N)

哈希散列法(哈希表)

其原理是首先根据key值和哈希函数创建一个哈希表(散列表),燃耗根据键值,通过散列函数,定位数据元素位置。

数据结构:哈希表

时间复杂度:几乎是O(1),取决于产生冲突的多少。

分块查找

分块查找又称索引顺序查找,它是顺序查找的一种改进方法。其算法思想是将n个数据元素”按块有序”划分为m块(m ≤ n)。每一块中的结点不必有序,但块与块之间必须”按块有序”;即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字;而第2块中任一元素又都必须小于第3块中的任一元素,依次类推。   

算法流程:

先选取各块中的最大关键字构成一个索引表;

查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;然后,在已确定的块中用顺序法进行查找。

这种搜索算法每一次比较都使搜索范围缩小一半。它们的查询速度就有了很大的提升。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。

数据库索引原理及优化

标签:结束   功能   特定   数据   linear   时间   否则   数据库   大于   

原文地址:https://www.cnblogs.com/mqlblog/p/11057895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!