What is a database index?
自从我18个月前开始在科技公司工作以来,我就听到他们谈论过。我知道它们可能会提高性能,而且它们似乎是特定于列的——(我们在"出生"列的日期为用户表编制索引)。
只需快速浏览一下它们到底是什么,它们被用来做什么,以及它们是如何工作的。
我写了一本完整的书!它也可以在网上免费获得:http://use-the-index-luke.com/
我试着很快回答你的问题,这不是我擅长的。上次我试过的时候,我写了一本书…
与表一样,索引由行和列组成,但以逻辑排序的方式存储数据,以提高搜索性能。把它想象成一本电话簿(印刷本)。它们通常被分类为
但是,如果你只知道名字,电话簿并不能真正帮助你。对于多列数据库索引也是如此。因此,索引可以潜在地提高搜索性能。如果你的问题索引错误(比如按名字搜索时的电话簿),它们可能是无用的。
在同一个表上可以有多个索引,但在不同的列上可以有多个索引。因此,
索引保存冗余数据(例如:聚集索引=电话簿)。它们与存储在表中的信息相同(例如:基于函数的索引),但以排序的方式。对于您执行的每个写操作(插入/更新/删除),数据库都会自动维护这种冗余。因此,索引会降低写入性能。
除了快速查找数据外,索引还可以用于优化排序操作(
为了得到更好的想法,请看我书的完整目录:http://use-the-index-luke.com/sql/table-of-contents
把它想象成一张桌子的目录。如果它在那里,数据库知道在哪里查找更具体的内容。如果没有,数据库必须搜索所有数据才能找到它。
在这篇维基百科文章中可以找到更详细的解释。
数据库索引是一种数据结构,旨在提高查找操作的时间复杂性。
没有索引的查找在最坏的情况下是
数据库索引还可以强制执行DB约束。许多数据库系统在一组称为
索引是与表或表集群关联的可选结构,有时可以加快数据访问速度。通过在表的一个或多个列上创建索引,在某些情况下,您可以从表中检索一组随机分布的行。索引是减少磁盘I/O的多种方法之一。
如果堆组织的表没有索引,那么数据库必须执行完整的表扫描以查找值。例如,在没有索引的情况下,在hr.departments表中对位置2700的查询要求数据库在每个表块的每一行中搜索该值。这种方法不能很好地扩展数据量。
http://docs.oracle.com/cd/e1882_01/server.112/e10713/indexiot.htm
它有一个非常相似的线程在这里运行。检查一下,这很有帮助。
I know that they potentially improve performance
号
是的,这是真的。但是,请记住,有时索引也可能是性能不佳的原因。示例:索引数据库的所有列无疑会严重影响性能。