Что является лучшим решением для получения больших наборов записей - более 3000 строк - PullRequest
0 голосов
/ 24 июля 2010

У меня есть таблица SQL Server с 3000 строк в нем.Когда я получаю эти строки, это требует времени с помощью оператора Select.Как лучше всего их найти?

Ответы [ 3 ]

1 голос
/ 24 июля 2010

Для этого вопроса важно перенести ваш SQL-запрос здесь, но при условии простого оператора select мои ответы будут

1) Сначала выберите ограниченное количество необходимых столбцов.Не используйте Select *.Используйте конкретные столбцы, если все столбцы не требуются в желаемом выводе

2) Если в операторе select есть фильтр, используйте фильтр в таком порядке, чтобы он выполнял минимальное количество операций и получал оптимальный результат (если вы публикуете операторы SQL, тогда я, безусловно, могу помочь в этом)

3) Создайте индекс для определенного поля, который также поможет повысить производительность вашего запроса

Надеюсь, это поможет

0 голосов
/ 26 июля 2010

3000 записей не является большой проблемой для SQL Server 2008, вам просто нужно: -

  1. избегать * в операторе выбора.
  2. необходима правильная индексация, вы можете попробоватьвключить столбец
  3. попытаться использовать индекс для столбцов первичного и внешнего ключей

, и вы также можете попробовать запрос по-другому, так как один и тот же запрос может быть написан по-разному, а сравнениестатистика запросов и время установки.

0 голосов
/ 24 июля 2010

Поскольку вы не хотите показывать все 3000 записей одновременно, используйте подкачку в своем выражении SQL. Вот пример использования базы данных AdventureWorks в SQL Server. Предполагая, что каждая ваша веб-страница показывает 25 записей, этот оператор получит все записи, необходимые на 5-й странице «QueryResults» - это общее табличное выражение (CTE), и я получаю только первичные ключи, чтобы сохранить CTE небольшим, если у вас миллионы записей. После этого я присоединяю QueryResult (CTE) к основной таблице (Product) и получаю все нужные мне столбцы. @PageNumber ниже - номер текущей страницы. Выполните «ГДЕ» и сортируйте операторы в CTE.

DECLARE @PageNumber int, @PageSize int;
SET @PageSize = 25;
SET @PageNumber = 5;

; WITH QueryResults AS
(
    SELECT TOP (@PageSize * @PageNumber) ROW_NUMBER() OVER (ORDER BY ProductID) AS ROW,
    P.ProductID
    FROM Production.Product P WITH (NOLOCK)
)
SELECT QR.ROW, QR.ProductID, P.Name
FROM QueryResults QR WITH (NOLOCK)
INNER JOIN Production.Product P WITH (NOLOCK) ON QR.ProductID = P.ProductID
WHERE ROW BETWEEN (((@PageNumber - 1) * @PageSize) + 1) AND (@PageSize * @PageNumber)
ORDER BY QR.ROW ASC
...