为什么需要单独的索引表

时间:2012-06-16 14:15:29

标签: database indexing

我正在阅读数据库中的索引。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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