SQL Server数据库中的排序列表

时间:2011-05-23 22:49:38

标签: sql sql-server tsql

我想知道在数据库中维护排序列表是否可行/好。

例如,我有一个优先级为1~100的项目列表。每次插入时,数据库都可以将其插入到正确的位置,这样当我调用.select(20)时,数据库可以返回前20个具有最高优先级的项目。

2 个答案:

答案 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而无需重新分配任何值。