什么是数据库索引?
什么是数据库索引?
这个问题已经在这里有答案:
我从18个月前开始在技术领域工作时就听说过它们。我知道它们可能可以提高性能,它们似乎是基于列的 -- (“我们在 date_of_birth 列上对用户表建立索引”)。
只是想快速了解它们到底是什么,用于什么,以及它们如何工作。
我写了一本完整的书来介绍数据库索引。这本书也可以在网上免费下载:http://use-the-index-luke.com/
我会尝试简短地回答你的问题,但这不是我的擅长点。上一次我尝试简短回答问题,最后却写出了一本书……
像表格一样,索引由行和列组成,但是以逻辑排序的方式存储数据以提高搜索性能。可以将其视为电话簿(纸质的)。它们通常按last_name
、first_name
以及其他可能的标准(例如邮编)进行排序。这种排序使得可以快速查找特定姓氏的所有条目。如果还知道名字,甚至可以很快地找到姓、名组合的条目。
然而,如果您只知道名字,电话簿并不会帮助您。多列数据库索引也是如此。因此,索引可能提高搜索性能。如果您对于问题使用错误的索引(例如搜索名字时使用电话簿索引),它们可能是无用的。
您可以在同一张表格上的不同列上生成许多不同的索引。因此,last_name
、first_name
索引与仅限于first_name
的索引是不同的(您需要通过它来优化名字搜索)。
索引存储的数据是冗余的(例如聚簇索引 = 电话簿)。它们拥有与表中存储的相同信息(例如基于函数的索引),但是以排序的方式存储。此冗余由数据库自动维护,对于执行每个写操作(例如insert/update/delete)都会自动维护。因此,索引会减少写入性能。
除了快速查找数据外,索引还可以用于优化order by
(例如排序操作)和物理上将相关数据紧密排列在一起(例如聚簇)。
若要更好地了解,请查看我的书的完整目录:http://use-the-index-luke.com/sql/table-of-contents