1

我正在阅读有关数据库中的索引的信息。

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

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

4

2 回答 2

1

这篇文章有一些非常有用的链接:sql server 中的索引、索引的内部工作和结构

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

于 2012-06-16T14:27:12.550 回答
0

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

于 2012-06-16T14:20:50.553 回答