如果数据库可以支持多达数百万条记录,那么如何组织所有这些数据,以便在合理的时间内执行查询?
答案 0 :(得分:9)
答案 1 :(得分:8)
完整答案是众多书籍和论文的主题; - )
但是,基本答案是所有现代RDBMS都有一些功能: 首先,他们有一个高效的查询优化器。这找到了一个很好的(并不总是最好的)路径来回答提供的查询。当然,这实际上可以帮助复杂的问题而不是简单的问题。
其次,它们以易于搜索的结构化格式存储数据。没有聚簇索引的数据称为堆,这通常对搜索不太有效,但它仍然是结构化数据。数据通常在其上具有聚集索引,逻辑上对数据进行排序。 (有些人认为它在物理上对数据进行了排序。这有一定的道理,但并非绝对正确.Itzik Ben Gan amoungst其他人有一篇很好的文章揭穿了这一信念。)
除聚簇索引外,通常还使用非聚簇索引。这些就像书中的索引一样,可以帮助告诉查询优化器在哪里查找所请求的数据,或者在某些特定情况下索引本身可能需要所有数据。
这当然是一种严重而可怕的过度简化。如果您想深入了解,请准备好在数据库理论中追求PHD。要获得一般性的理解,您可以查看有关数据库内部的书籍。特别是对于SQL Server,SQL Server 2008 Internals有很多关于此主题的信息。
答案 2 :(得分:2)
我非常喜欢This解释(包括图形;)
这是artcicle的结论:
<强>结论强>
Index example http://mattfleming.com/files/images/example.gif
创建B树索引以减少 查找和所需的I / O量 加载一组数据。高度选择性 index使用最少量的I / O. 必要的,选择性差的指数 并不比桌面扫描好多了。