【发布时间】:2010-04-29 23:42:25
【问题描述】:
如果数据库可以支持多达数百万条记录,那么如何组织所有这些数据以便可以在合理的时间内执行查询?
【问题讨论】:
标签: database data-structures performance
如果数据库可以支持多达数百万条记录,那么如何组织所有这些数据以便可以在合理的时间内执行查询?
【问题讨论】:
标签: database data-structures performance
【讨论】:
一个完整的答案是许多书籍和论文的主题;-)
然而,基本的答案是所有现代 RDBMS 都有几个特性: 首先,他们有一个高效的查询优化器。这会找到一个好的(并不总是最好的)路径来回答所提供的查询。当然,这实际上比简单的问题更能帮助解决复杂的问题。
其次,它们以易于搜索的结构化格式存储数据。没有聚集索引的数据称为堆,这通常搜索效率较低,但它仍然是结构化数据。数据上通常会有一个聚集索引,用于对数据进行逻辑排序。 (有些人认为它对数据进行物理排序。这有一定道理,但并非绝对正确。Itzik Ben Gan 等人发表了一篇很好的文章来揭穿这种观点)。
除了聚集索引,一般使用非聚集索引。这些就像书中的索引,可以帮助告诉查询优化器在哪里查找请求的数据,或者在某些特定情况下,索引本身可能包含所有需要的数据。
这当然是一种粗暴而可怕的过度简化。如果您想深入了解,请准备好攻读数据库理论博士学位。对于一般水平的理解,您可以查看有关数据库内部的书籍。特别是对于 SQL Server,SQL Server 2008 Internals 有很多关于这个主题的信息。
【讨论】:
我真的很喜欢This的解释(包括图形;)
这是文章的结论:
结论
(来源:mattfleming.com)
B-tree 索引的创建是为了减少 查找所需的 I/O 数量和 加载一组数据。高度选择性 索引使用最少的 I/O 必要的、选择性差的指标 并不比表扫描好多少。
【讨论】: