MS SQL 2008 & Paging
От: Tom Россия http://www.RSDN.ru
Дата: 29.04.09 11:13
Оценка:
Всем привет,

Есть страничка WEB и стандартная задача, реализовать paging + сортировку + фильтрацию. Как на 2008-ом сиквеле это более грамотно реализуется. Можно ли это реализовать без динамического SQL-я.

Спасибо
Народная мудрось
всем все никому ничего(с).
Re: MS SQL 2008 & Paging
От: syrompe  
Дата: 29.04.09 11:18
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>Всем привет,


Tom>Есть страничка WEB и стандартная задача, реализовать paging + сортировку + фильтрацию. Как на 2008-ом сиквеле это более грамотно реализуется. Можно ли это реализовать без динамического SQL-я.


Tom>Спасибо


paging — см top + ROW_NUMBER
сортировка+ фильтрация — сдается мне, без динамического SQL в общем случае никак.
Re[2]: MS SQL 2008 & Paging
От: Tom Россия http://www.RSDN.ru
Дата: 29.04.09 11:38
Оценка:
S>paging — см top + ROW_NUMBER
S>сортировка+ фильтрация — сдается мне, без динамического SQL в общем случае никак.

В принципе динамический SQL или нет — это не очень критично.
Критично что бы метаданные возвращались при использовании FMTONLY так как по запросу много чего генерируется.
Народная мудрось
всем все никому ничего(с).
Re[2]: MS SQL 2008 & Paging
От: Аноним  
Дата: 04.05.09 15:52
Оценка:
Здравствуйте, syrompe, Вы писали:

S>paging — см top + ROW_NUMBER

S>сортировка+ фильтрация — сдается мне, без динамического SQL в общем случае никак.

Насущная для меня тема. Сделал сортировку как показано здесь http://www.karpach.com/SQL-Serve-2005-Paging.htm:

DECLARE @PageNum AS INT;
DECLARE @PageSize AS INT;
SET @PageNum = 2;
SET @PageSize = 10;
 
WITH OrdersRN AS
(
    SELECT ROW_NUMBER() OVER(ORDER BY OrderDate, OrderID) AS RowNum
          ,OrderID
          ,OrderDate
          ,CustomerID
          ,EmployeeID
      FROM dbo.Orders
)
 
SELECT *
FROM OrdersRN
WHERE RowNum BETWEEN (@PageNum - 1) * @PageSize + 1
      AND @PageNum * @PageSize
ORDER BY OrderDate,OrderID;


Недавно появилась проблема. Заметил, что чем больше в Orders данных, тем тормознее начинает работать запрос. Что, само по себе и не удивительно (тело CTE перелапачивает свю таблицу). Так как же тогда рекомендуют ведущие собаководы?
Re[3]: MS SQL 2008 & Paging
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.05.09 06:00
Оценка:
Здравствуйте, <Аноним>, Вы писали:
А>Недавно появилась проблема. Заметил, что чем больше в Orders данных, тем тормознее начинает работать запрос. Что, само по себе и не удивительно (тело CTE перелапачивает свю таблицу). Так как же тогда рекомендуют ведущие собаководы?
http://rsdn.ru/article/db/identity.xml#EQLAC
Автор(ы): Иван Бодягин
Дата: 07.02.2004
Уникальная идентификация записей в таблице, является практически основой реляционных СУБД. Вообще в реляционной теории предполагается, что если две записи ни чем друг от друга не отличаются, то это явная избыточность, и количество таких записей можно сократить до одной. Собственно вопросам этой самой идентификации, каковых возникает на удивление много, и посвящен этот FAQ.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: MS SQL 2008 & Paging
От: Аноним  
Дата: 13.05.09 07:24
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, <Аноним>, Вы писали:

А>>Недавно появилась проблема. Заметил, что чем больше в Orders данных, тем тормознее начинает работать запрос. Что, само по себе и не удивительно (тело CTE перелапачивает свю таблицу). Так как же тогда рекомендуют ведущие собаководы?
S>http://rsdn.ru/article/db/identity.xml#EQLAC
Автор(ы): Иван Бодягин
Дата: 07.02.2004
Уникальная идентификация записей в таблице, является практически основой реляционных СУБД. Вообще в реляционной теории предполагается, что если две записи ни чем друг от друга не отличаются, то это явная избыточность, и количество таких записей можно сократить до одной. Собственно вопросам этой самой идентификации, каковых возникает на удивление много, и посвящен этот FAQ.


Нашел способ, что предназначен для Sql 2005. Сравнил по актуальным планам, практически одинаков с моим способом. Чем он тогда лучше?
Re[5]: MS SQL 2008 & Paging
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.05.09 07:46
Оценка:
Здравствуйте, <Аноним>, Вы писали:
А>Нашел способ, что предназначен для Sql 2005. Сравнил по актуальным планам, практически одинаков с моим способом. Чем он тогда лучше?
Там вроде был способ без Row_Number, на одних только ID. У тебя есть primary key в табличке? Тогда можно построить пейджинг за O(logN).
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: MS SQL 2008 & Paging
От: Аноним  
Дата: 13.05.09 08:38
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, <Аноним>, Вы писали:

А>>Нашел способ, что предназначен для Sql 2005. Сравнил по актуальным планам, практически одинаков с моим способом. Чем он тогда лучше?
S>Там вроде был способ без Row_Number, на одних только ID.

SELECT * FROM
(SELECT TOP (@PageSize) * FROM
    (SELECT TOP (@Page * @PageSize + @PageSize) * FROM sys.objects 
     ORDER BY name ASC) SO1
  ORDER BY name DESC) SO2
ORDER BY name


1. Тут сортировка по имени (что и логично, так как врядли пользователю интересна сортировка по идентификатору, он таких вещей то и не знает)
2. А чем плох row_number?

S>У тебя есть primary key в табличке? Тогда можно построить пейджинг за O(logN).


Да, конечно, есть. Подскажи, пожалуйста, как такое сделать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.