【发布时间】:2016-02-06 21:04:32
【问题描述】:
问题如下:
postgresql(或其他数据库实现)是否对聚集索引进行 O(1) 查找? 即,从行的id(其中id列是聚集索引)直接查找文件系统上的行位置
如果没有办法进行这样的查找,是否通过 id log2n 查找行?
- 考虑到这一点,postgresql 或任何 sql 引擎是否有办法让索引产生其他表中的行的位置以避免这种情况?
- postgresql 或任何 sql 引擎是否可以直接查找行(以及与行移动方式相关的生命周期)? 我假设行不会相对于数据库引擎存储格式移动,除非更改聚集索引...
这些问题源于以下实现多对多关系所必需的联结表:
junction_table:
parent_id
child_id
检索一组 child_ids
select * from junction_table where parent_id=parent_value
一个基本正确的实现应该为子行产生一组位置 更糟糕的是,至少有一种方法可以从 child_ids 集中计算子行位置
VS 产生子行方向位置的一对多查询:
one_to_many_child_table:
id
name
parent_id
select * from child_table where p_id=parent_value
【问题讨论】:
-
数据库系统中大部分索引都是B+树实现的,所以算法复杂度是O(log n)。哈希算法是 O(1),但很少实现
标签: mysql sql postgresql indexing