SELECT WHERE [主键] = [主键值] OF(1)?

时间:2013-03-31 08:38:43

标签: select key hashtable where rdbms

对于典型的现代RDBMS来说,通过一个特定主键查询和按键查询哈希表一样快是否正确?

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

2 个答案:

答案 0 :(得分:1)

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

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

在启发式优化中,DBMS系统通常在表目录中保存MAX,MIN,AVG等信息。因此,如果信息可以从目录信息中导出,则查询执行时间可以是常数O(1)。

阅读:第19章Algorithms for Query Processing and Optimization

答案 1 :(得分:0)

我们来看看InnoDB存储引擎。所有InnoDB索引都是B树。 B树中最坏情况的搜索复杂度是O(log n)。但是如果一个表几乎完全适合主内存,InnoDB可以自动构建一个哈希索引。 Adaptive Hash Indexes