Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 为什么需要单独的索引表_Database_Indexing - Fatal编程技术网

Database 为什么需要单独的索引表

Database 为什么需要单独的索引表,database,indexing,Database,Indexing,我在读数据库中的索引 首先,我有我原来的桌子。然后我添加另一个表(索引表),每当我在第一个表中添加一行时,我都会努力知道在索引表中插入它的位置(比如按字母顺序)。然后,当我搜索一些记录时,我使用索引表,它将我的搜索问题转换为O(log),而不是O(n) 我的问题是:为什么不在原始表格中进行此项工作?。至少如果该表只有一个索引。如果它有更多,那么应用索引表的思想。至少在我阅读的文献中从未提到过这个想法,我认为可能有一个很好的理由。这不是通常在数据库上执行索引的方式-通常一个表有它的索引,数据库服务

我在读数据库中的索引

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


我的问题是:为什么不在原始表格中进行此项工作?。至少如果该表只有一个索引。如果它有更多,那么应用索引表的思想。至少在我阅读的文献中从未提到过这个想法,我认为可能有一个很好的理由。

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

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

本文提供了一些非常有用的链接:


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

这篇文章有一些非常有用的链接:


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

这就是为什么大多数数据库产品都有这样的概念,也就是为什么大多数数据库产品都有这样的概念,我认为您的回答没有回答我的问题。我完全同意你说的,但我要问的是为什么要有另一个索引表,而不是像直接插入原始表那样努力。我要说的是“你没有另一个表”,我想你的回答没有回答我的问题。我完全同意你说的,但我要问的是为什么要有另一个索引表,而不是像直接插入原始表那样做。我要说的是“你没有另一个表”