
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
数据库的开发架构是大多数程序员都需要学习的一个编程开发知识,而今天我们就通过案例分析来了解一下,数据库索引的定义与原理。
一、索引的定义
MySQL官方对索引的定义为:索引(Index)是协助MySQL高效获取数据的数据结构。
本质上,索引的目的是为了提高查询效率,通过不断地缩小想要获取数据的范围来筛选出终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。
可以类比银行的保险柜,比如你要找归属你的保险柜子。如果没有索引,你需要拿着钥匙,一个个的保险柜的试过去才能找到属于你的保险柜。但是如果有了索引,而且保险柜能够以物理分区的方式存在在对应的区域,同时你可以根据钥匙上的编号(A1003-10-17),找到保险柜所在A1003的存放房间,找到存放室保险柜的10排,再找到17个位置,找到属于你的保险柜,这个定位就快很多了。在没有索引的情况下,要想完成这个事情还是比较困难的。
二、索引的原理
除了保险柜之外,生活中可以引出很多类似的索引例子,如字典词典的目录、图书馆的检索录、火车的座次表等。
它们的原理一致:不断地缩小数据范围来筛选数据,并把随机数据变成顺序数据,方便我们更快地锁定数据。
这种索引的理解同样适用我们的数据库查询,但是数据库会有很多更复杂的情况,除了等值查询外,还有范围查询(>、<、between、in)、模糊查询(like)、并集查询(or)、交集查询(and)等等。这就要求数据库选择更加复杂和成熟的方式来应对所有问题。
根据我们上面保险柜的案例,可以对数据按照一定规则进行拆分,这样匹配的范围就降低了,但是这远远不够满足数据库复杂的查询要求。于是,数据库系统的设计者从查询算法的角度进行优化。
其中基本的查询算法是顺序查找(linearsearch),这种算法复杂度为O(n),在数据量很大时就很不理想了,而且数据量越大,计算越复杂。
但没关系,强大的计算机科学提供了更多优秀的查找算法,比如二分查找(binarysearch)、二叉树查找(binarytreesearch)等。
但是这些查找算法都要求应用于特定的数据结构之上,如二分查找要求被检索数据有序,而二叉树查找只能基于二叉查找树结构上操作,数据本身的组织结构不可能完全满足各种数据结构,理论上也无法同时要求将多列都按顺序进行组织。
因此,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。