最有效的订购后数据库设计

时间:2013-07-12 07:23:52

标签: sql design-patterns database-design

我的posts表格有post_order列。我存储每个帖子的顺序。当我将行的顺序从25更改为15时,我应该将所有行从15更新为结尾。 它适用于少量行,但在数千行中它最差。

订购帖子有更好的设计,效率更高吗?

2 个答案:

答案 0 :(得分:0)

为什么不改变相关的订单而不是从15开始一直下降?假设你有一张这样的表:

Post  Post_Order
----------------------
x       1
y       2
z       3
.       .
.       .
t       10

如果您想将t更改为第一个帖子,可以将t的post_order更改为1并将第1(x)行的行设置为您首先选择的值(10)。

答案 1 :(得分:0)

您可以使用旧的BASIC技巧(从BASIC仍有行号开始),留下间隙

例如(从Kuzgun's answer无耻地复制):

x       10
y       20
z       30
.       .
.       .
t       100

然后将t移动到第二位只会更新一行:

x       10
t       15
y       20
z       30
.       .
.       .

当然,你仍然需要不时地移动多行(当它们“聚集”太多时),但这应该是相对罕见的(并且如果变成一个,你可以使初始间隙更大)问题)。


或者,继续做你正在做的事情。

除非重新排序成千上万的项目非常,否则现代硬件上的现代DBMS应该不会有太多麻烦 - 只需要小心从一个命令执行,例如...

UPDATE POST
SET POST_ORDER = POST_ORDER + 1
WHERE POST_ORDER > 1 -- AND other criteria

...而不是为每一行发出单独的UPDATE