Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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
Select 选择[主键]=[主键值]的位置是否为O(1)?_Select_Key_Hashtable_Where_Rdbms - Fatal编程技术网

Select 选择[主键]=[主键值]的位置是否为O(1)?

Select 选择[主键]=[主键值]的位置是否为O(1)?,select,key,hashtable,where,rdbms,Select,Key,Hashtable,Where,Rdbms,对于典型的现代RDBMS,按一个特定主键查询与按键查询哈希表一样快,这是正确的吗 或者是否有“实际工作”来遍历表并跟踪主键值?这似乎是不可想象的浪费,即使有主键的自动索引。数据库操作涉及对辅助内存单元(磁盘)的访问。而要实现效率,重要的是减少块访问时间(而不是操作)。选择查询的复杂性取决于所做的优化类型。 因为您提到了键属性上的=,所以使用了对文件进行排序的键属性上的相等比较(带a),二进制搜索是有效的(比内部搜索更有效)。二进制搜索通常访问log2(Br)块,其中Br是文件块的编号。(这是一种

对于典型的现代RDBMS,按一个特定主键查询与按键查询哈希表一样快,这是正确的吗


或者是否有“实际工作”来遍历表并跟踪主键值?这似乎是不可想象的浪费,即使有主键的自动索引。

数据库操作涉及对辅助内存单元(磁盘)的访问。而要实现效率,重要的是减少块访问时间(而不是操作)。选择查询的复杂性取决于所做的优化类型。
因为您提到了键属性上的
=
,所以使用了对文件进行排序的键属性上的相等比较(带a),二进制搜索是有效的(比内部搜索更有效)。二进制搜索通常访问log2(Br)块,其中Br是文件块的编号。(这是一种计算,您可能还需要访问额外的索引块)

它还取决于索引实现的类型。如果它是通过多级或B、B+实现的,那么访问时间可能会进一步减少,这取决于节点中的键数(这进一步取决于一个块中可以容纳多少条记录)

在启发式优化中,DBMS系统通常将最大值、最小值、平均值等信息存储在表目录中。所以,若信息可以从目录信息中导出,则查询执行时间可能是常数O(1)


阅读:第19章,让我们以InnoDB存储引擎为例。所有InnoDB索引都是B树。B-树中最坏情况下的搜索复杂度为O(logn)。但如果一个表几乎完全放在主内存中,InnoDB可以自动构建哈希索引

它应该是快的,但不一定是O(1)。许多数据库索引是树结构,而不是哈希表。听起来像是在考虑通过主键上的自动索引进行树搜索。这将是O(logn)。这将令人失望。没什么私事,但我希望你错了!阅读用于查询处理和优化的算法感谢您提供的资源。实际上,在阅读数据库访问结构、存储结构和查询优化之后,就可以回答这个问题了。