我想知道在数据库中维护排序列表是否可行/好。
例如,我有一个优先级为1~100的项目列表。每次插入时,数据库都可以将其插入到正确的位置,这样当我调用.select(20)
时,数据库可以返回前20个具有最高优先级的项目。
答案 0 :(得分:6)
添加名为优先级的字段。适当地填充数据并按其排序,并根据您的数据库选择前20个,例如
SELECT TOP 20 [Your fields here]
FROM table
ORDER BY priority
或
SELECT [Your fields here]
FROM table
ORDER BY priority
LIMIT 20
为字段添加索引也可能是一个好主意。
这是一个非常持久的解决方案。利用行实际存储在表中的顺序的任何其他解决方案都将非常脆弱。
答案 1 :(得分:1)
我想知道它是否可能/好 在数据库中维护一个排序列表。
请参阅@Conrad Frix的答案,发现它确实可行(使用窗口函数ROW_NUMBER()
是另一种方法,它具有标准SQL的优点,并且在SQL Server中受支持)。请注意,这会向表中添加一列(如果愿意,则为relvar的属性),这不是“排序列表”,但似乎是您需要的。
是个好主意吗?显然,如果这是您的应用程序/企业的要求,那么维护数据库中的值确实是合适的。
每次插入时,数据库都可以 将其插入正确的位置
请注意,如果您有100行具有唯一priority
属性值1-100并且您需要INSERT
一个值,例如priority = 55
,则现有值55-100将需要增加1并且数据库不会为您执行此操作,除非您在数据库对象中编写过程代码(例如触发器)。如果您只需管理INSERT
s(而不是UPDATE
s和DELETE
s),那么更好的方法是从更大的差距开始,例如您最初的100行可能有priority
个值1000,2000,3000,... 100000。现在,与之前相同的INSERT
可以在54000到55000之间,通过为其分配属性priority = 54500
而无需重新分配任何值。