蒙恩招生网 蒙恩招生网4
2023-10-30
更新时间:2023-12-03 20:21:29作者:51data
简介:数据库索引是一个不容忽视的点。一个好的指数可以让查询更快,但反之,一个不合适的指数会带来不利影响。本文将通过四个问题来探讨索引的概念以及如何合理使用,希望对你有所帮助。这里有四个问题。
为什么要在表中添加主键?为什么索引会使查询更快?为什么索引会减慢写入、修改和删除的速度?在什么情况下应该同时在两个字段上建立索引?为什么要添加主键?
没有主键的表。里面的数据杂乱无章的存储在磁盘上。如果在数据量大的时候想要查询,一些数据一个一个的遍历速度很慢。如果给表一个主键,表在磁盘上的存储结构就会从整齐的排列结构变成平衡的树形结构。通过将这种结构与高效的算法相结合,查询速率将变得更快(这里的主键也是索引)。
指数如何让查询更快?
B-tree结构(B-tree也叫“B-tree”的变种,节点之间的链表比较多)高效算法索引是通过提前排列顺序,构建一个平衡的树结构,以便在搜索中应用二分搜索法等高效算法。比如顺序搜索的复杂度是O(n),排序后二分搜索法的责任是O(log2n)。当n的值较大时,它们之间的效率差距会很明显。(这里涉及到了B-平衡树结构和二分搜索法方法,这里就不详细解释了。想了解的朋友可以看相关资料)
为什么索引会降低添加、删除等操作的速度?
索引可以提高读性能,但是也会降低写性能。添加和删除数据会破坏平衡树的平衡。因此,每次数据发生变化时,DBMS都必须重新组织树结构以保证其正确性,这就带来了性能开销。
什么情况下应该建立双指数?
这里先介绍两个名词。
聚集索引:一个表中只能有一个聚集索引(主键),因为主键的作用是将表数据格式转换成平衡树的格式。非聚集索引:它也采用平衡树结构。每次在一个字段中建立一个新的索引,都会复制该字段中数据的一个副本来生成索引,节点包含字段值和主键值。因此,向表中添加索引会增加表的体积并占用磁盘存储空间。
区别:可以通过聚集索引直接找到需要查找的数据。但是,通过非聚集索引,可以找到记录对应的主键值,然后使用主键值通过聚集索引找到所需的数据。也就是说,使用非聚焦索引最终会通过聚焦索引来搜索目标数据,而建立过多的索引会导致DBMS需要维护多种数据结构,从而导致性能下降。
那么什么情况下应该建立双指数呢?
以下是两个演示之间的比较。
演示1:
//将年份创建为非聚集索引
在USER_INFO(名称,年份)上创建索引index _ name _ year
//按年份查找名称,需要先找到年份平衡树得到主键,然后用主键在聚簇索引中找到目标数据值。
从userInfo中选择姓名,其中year=' 12
演示2:
//建立带有名称和年份字段的双重索引
在USER_INFO(名称,年份)上创建索引index _ name _ year
//按年份查找名称
从userInfo中选择姓名,其中year='12 '
//此时,将首先检查非聚集索引的年平衡树。当发现子叶节点除了主键还有name字段的值时,可以直接返回值,不需要经过聚集索引。
摘要
索引是通过平衡树和算法的效率来完成的提高查询但是因为写操作会破坏树的平衡,DBMS需要重新梳理树,以此类推,索引会导致写效率降低。但一切都需要结合实际场景合理应用聚集索引、非聚焦索引、双重索引等。才能发挥索引的强大作用。
感谢您的阅读。如果你喜欢这篇文章,请关注并转发。本头条将继续分享IT技术知识。如果对文章内容有其他想法、意见和建议,欢迎大家讨论,共同进步。