SQL для выбора кластера записей из огромной таблицы с оптимальным SQL - PullRequest
0 голосов
/ 03 октября 2011

Я пытаюсь разбить на страницы с использованием MS SQL Server 2005 в одном из моих приложений ASP сети.Чтобы получить 10 записей из таблицы сотрудников, я использую следующий SQL.

;WITH CTE AS (
                SELECT EmployeeID,
                       [Name],
                       ROW_NUMBER() OVER(ORDER BY EmployeeID ASC) AS RowNo
                FROM   Employee
            ) SELECT *
              FROM   CTE WHERE RowNo BETWEEN 11 AND 20  

Проблема в том, что моя таблица сотрудников имеет 100 тысяч записей, и, поскольку я выполняю вышеуказанный запрос, это занимает много времени.Я видел в MySQL, что есть фраза LIMIT, чтобы ограничить количество выбранных записей.

Пожалуйста, помогите мне получить определенное количество записей без использования Common Table Expression и без выполнения запроса, подобного приведенному выше.Я хотел бы знать, есть ли лучший способ, чем этот.

Заранее спасибо за ваше время и помощь.

1 Ответ

1 голос
/ 03 октября 2011

Я пробовал ваш запрос для таблицы с 150 000 строк, я пытался использовать столбец с индексом и один без индекса.Оба были менее чем за 1 секунду времени выполнения.Я полагаю, у вас другая проблема.

Поскольку я полагаю, что ваша проблема лежит в другом месте, я полагаю, вы попробуете это:

;WITH CTE AS ( 
            SELECT EmployeeID, 
                   [Name], 
                   ROW_NUMBER() OVER(ORDER BY EmployeeID ASC) AS RowNo 
            FROM   Employee WITH (NOLOCK)
        ) SELECT * 
          FROM   CTE WHERE RowNo BETWEEN 11 AND 20  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...