为什么需要单独的索引表

问题描述:

我在阅读有关数据库中的索引。为什么需要单独的索引表

首先,我有我的原始表格。然后我添加另一个表(索引表),每当我在第一个表中添加一行时,我都会努力知道将它插入索引表(按字母顺序排列)。然后,当我搜索一些记录时,我使用索引表,它将我的搜索问题转换为O(log)而不是O(n)。

我的问题是以下几点:为什么不在原表中做这种努力?至少如果该表只有一个索引。如果它有更多的话,那么应用索引表的想法。至少这个想法在我读过的文献中从未提及,我想也许有一个很好的理由。

+0

也就是说,为什么大多数数据库产品都具有像[聚簇索引]这样的概念(http://msdn.microsoft.com/zh-cn/library/ms190639(v = sql.105).aspx) –

这篇文章有一些非常有用的链接:indexes in sql server, internal working and structure of indexes

简短的回答:你的桌子上聚集索引不应该创建一个单独的映射,因为它排序原始表本身。其他索引将创建映射到聚集的行id。根据您正在阅读的数据库,这可能会有所不同。

这不是通常在数据库上完成的索引 - 通常一个表有索引,当查询允许时数据库服务器将自动尝试使用最佳索引 - 例如,如果索引了Name列,如果名称完全匹配(= 'foo'),则会使用您的索引;如果您使用特定字符串(LIKE 'foo%')开始查询,它可能会选择使用您的索引;而如果您在查询索引列中包含子字符串(LIKE '%foo%'),那么它不能使用该索引,并且必须扫描整个表。

+0

我认为你的回答不能回答我的问题。我同意你所说的一切,但我问的是为什么要有另一个索引表,而不是直接在原始表中插入。 – pritzo

+0

我在说“你没有**另一个**表” –