我正在阅读数据库中的索引。
首先,我有原始表格。然后我添加另一个表(索引表),每次在第一个表中添加一行时,我都会努力知道将它插入索引表的位置(按字母顺序排列)。然后,当我搜索某些记录时,我使用索引表,它将我的搜索问题转换为O(log)而不是O(n)。
我的问题如下:为什么不在原始表中做这些努力?至少如果该表只有一个索引。如果它有更多,那么应用索引表的想法。至少这个想法在我读过的文献中从未提及,我想也许有充分的理由。
答案 0 :(得分:1)
这篇文章有一些非常有用的链接:indexes in sql server, internal working and structure of indexes
简短回答:表上的聚簇索引不应该创建单独的映射,因为它会对原始表本身进行排序。其他索引将创建聚簇的行ID的映射。根据您正在阅读的数据库,这可能会有所不同。
答案 1 :(得分:0)
这不是通常在数据库上完成索引的方式 - 通常表有索引,数据库服务器会在查询允许时自动尝试使用最佳索引 - 例如,如果你有Name
列索引,并且您选择名称完全匹配的位置(= 'foo'
),它将使用您的索引;如果你做了一个以特定字符串(LIKE 'foo%'
)开头的查询,它可以选择使用你的索引;如果您进行查询,其中索引列包含子字符串(LIKE '%foo%'
),那么它不能使用该索引,并且必须扫描整个表。