1. Вот процедура (самая большая таблица имеет около 1 млн строк) для извлечения записейSQL Server Dynamic Заказывайте Issue Performance
Create Procedure GetallTransctions(@Pagesize,@CurrentPage,@SortColumn,@SortDirection)
AS
Begin
select TOP (@PageSize) * from (
Select Top ((@PageSize*CurrentPage)[email protected]) * from TransactionDetails where
TransactionType ='Pay'--Few more conditions
Order By
case when @SortColumn= 'CustomerName' and @SortDirection= 'ASC'
then CustomerName end asc,
case when @SortColumn= 'CustomerName' and @SortDirection= 'DESC'
then CustomerName end desc
) a
Выше производительность процедура хороша, пока количество строк не меньше 1М. Когда размер записей продолжает увеличиваться, потребуется около 40 секунд для выполнения. Если я жесткий код заказа по так
Order By
CustomerName ASC
Запрос занимает 3-5 секунд, чтобы выполнить, но я не могу жестко закодировать сортировки столбцов. Является ли оператор Case в порядке по порядку влиять на производительность? Любое решение/запрос.
2. Выполняется процедура всплытия. Поэтому позвольте сказать, что мне нужно выбрать записи в диапазоне 70000 - 70010. Мы применяем сортировку на основе значений значений параметров 0-70010 и принимаем 10 лучших записей. вместо этого примените сортировку и выборку только 70000 - 70010. Есть ли другой способ?
intially я использовал динамический запрос, но мы переходим на предварительно скомпилированный запрос. Есть ли другое решение без динамического запроса? – Siva
@ Шива. , , Решение было бы повторить запрос несколько раз 'if @sortColumn =. , , начните выбор. , , order by CustomerName asc' end else if. , , '. Я не рекомендую повторять запрос. Это становится кошмаром для обслуживания. –