在数据库中存储大量有序但可重新排序的数据的策略?

时间:2010-07-28 13:03:25

标签: database-design

如果您需要以特定顺序返回相当大量的数据(例如一百万行),一种显而易见的方法是简单地在每一行上放置一个数字索引并按该索引排序。但是,如果您希望在该数据的中间创建一个新行,您需要希望在您需要放置的两行之间的索引中存在间隙,或者您需要“UPDATE table SET” position = position + 1 WHERE position> new_position“这可能很慢而且不可扩展。

有没有更智能的策略来处理这个问题?我最好只是在我的行之间留下很大的间隙并希望最好(可能使用后台进程重新调整行。)是否有一个等同于链表的数据库?

编辑:我知道索引是什么以及传统排序是如何完成的(阅读我的第一句话。)我想知道是否有一个数据结构将新行插入有序索引的中间,这样范围查询仍然可以完成。据我所知,传统的next / prev指针不能用作单个范围的查询。

2 个答案:

答案 0 :(得分:1)

您根本无法在数据中间创建元组。您将在最后添加它。 必须使用按行的顺序以正确的顺序返回数据,如果将其编入索引,则会很快。

  

是否存在与链表相当的数据库?

不直接 - 有一些在sql中存储树的想法 - 这比你要求的要多一些 - 但几乎相同的设计。 但请注意,这会导致查询每个元组(读取链接目标,选择下一个元组)。如果处理数百万个元组,这将非常缓慢。

您的编辑:您无法添加元组中间!

如果你真的需要这样做:

  • 创建一个新表 - 按所需顺序添加所有内容
  • 放弃旧桌
  • 将新表重命名为旧表
  • 请注意,您需要为每个添加的元组执行此操作(只要未在数据末尾添加它)

答案 1 :(得分:0)

数据库不是电子表格,没有隐式排序。

select Col1, Col2, Col3
from some_table
where Col3 between value_1 and value_2
order by Col2 asc;

为了加速检索,使用了索引。