Сортированный список в базе данных SQL Server - PullRequest
2 голосов
/ 24 мая 2011

Мне было интересно, возможно ли / хорошо ли поддерживать отсортированный список в базе данных.

Например, у меня есть список элементов с приоритетом 1 ~ 100.Каждый раз, когда я вставляю, база данных может вставить ее в правильное положение, поэтому, когда я вызываю .select(20), база данных может вернуть мне первые 20 элементов с наивысшим приоритетом.

Ответы [ 2 ]

6 голосов
/ 24 мая 2011

Добавить Поле, называемое приоритетом. Заполните их данными и отсортируйте по ним, и в зависимости от вашей базы данных выберите 20 лучших, например.

SELECT TOP 20 [Your fields here] 
FROM   table 
ORDER  BY priority 

или

SELECT [Your fields here] 
FROM   table 
ORDER  BY priority 
LIMIT 20

Также неплохо было бы добавить индекс для поля.

Это очень долговечное решение. Любое другое решение, использующее преимущества порядка физического хранения строк в таблице, будет очень хрупким.

1 голос
/ 24 мая 2011

Мне было интересно, можно ли / хорошо поддерживать отсортированный список в базе данных.

См. Ответ @Conrad Frix, чтобы узнать, что это действительно возможно (используя оконную функцию ROW_NUMBER() - это еще один подход, который имеет преимущество, заключающееся в том, что он является стандартным SQL и поддерживается в SQL Server).Обратите внимание, что это добавляет столбец к таблице (атрибут relvar, если хотите), который не является «отсортированным списком», но, кажется, является тем, что вам требуется.

Это хорошая идея?Ясно, что если это требование к вашему приложению / предприятию, тогда действительно целесообразно поддерживать значения в базе данных.

Каждый раз, когда я вставляю, база данных может вставить ее в правильное положение

Обратите внимание, что если у вас есть 100 строк с уникальными значениями атрибута priority 1-100, и вам нужно INSERT значение, скажем, priority = 55, существующие значения 55-100 должны бытьувеличивается на единицу, и база данных не сделает этого за вас, если вы не написали процедурный код в объекте базы данных для этого (например, триггер).Если вам нужно управлять только INSERT с (а не UPDATE с или DELETE с), тогда, возможно, лучшим подходом будет начать с более крупных пробелов, например, ваши первые 100 строк могут иметь значения priority 1000, 20003000, ... 100000.Теперь тот же самый INSERT, что и раньше, может идти между 54000 и 55000, присваивая ему атрибут priority = 54500 без необходимости переназначения каких-либо значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...