在SQL中指定随机元组访问顺序?

时间:2016-08-17 20:33:46

标签: sql postgresql sqlite relational-database

原则上,可以通过以随机顺序访问行来加速某些查询,而不是磁盘上的顺序(这可能与插入顺序有关,尽管VACUUM操作等可以回收和重新执行订购空间)。这种情况的一个例子是具有高基数值的顺序密钥的不同(密钥)查询。例如,假设关系X(k TEXT, v INT)在磁盘上按从左到右的顺序排列了以下数据:

  

(A,0),(A,1),(A,2)...(A,10 ^ N),(B,10),(B,0),(B,1),( b,2)...(b,10 ^ N),(d,0),(d,1),(d,2)...(d,10 ^ N),(H,0),(小时,1),(H,2)...(H,10 ^ N)。

如果我们想要流式传输

的输出
SELECT distinct(k) FROM X
如果访问元组的顺序是随机的,我们原则上可以更快地获得答案(当然,为了获得完整答案,我们无论如何都需要访问所有元组,但我正在考虑流式设置甚至是获得99%的数据是合适的近似值的设置。

对随机元组访问这一概念的一个可能的反对意见是,今天的硬件使块状I / O和缓冲的数量级比单个随机访问快几个,但这并不会真正影响主要思想,因为我们可以想象随机访问阻止而不是随机元组(跟踪到目前为止访问过哪些块以避免重复读取)。

看起来像postgres和sqlite不支持这个想法,或者至少它没有在SQL中公开,如

SELECT distinct(k) FROM X [VISITING {random_tuples,sequential_blocks_from_beginning, sequential_blocks_from_end,random blocks}]

有什么方法可以做我想做的事吗?如果没有,除了迄今为止在软件中实现的内容之外还有其他原因吗?

0 个答案:

没有答案