【发布时间】:2016-03-02 05:27:50
【问题描述】:
1.这是检索记录的过程(最大的表大约有 1M 行)
Create Procedure GetallTransctions(@Pagesize,@CurrentPage,@SortColumn,@SortDirection)
AS
Begin
select TOP (@PageSize) * from (
Select Top ((@PageSize*CurrentPage)+@PageSize) * 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
在行数小于 1M 之前,上述过程性能良好。当记录大小不断增加时,执行大约需要 40 秒。如果我像这样对订单进行硬编码
Order By
CustomerName ASC
查询需要 3-5 秒才能执行,但我无法对排序列进行硬编码。 Case 语句 in order by 子句会影响性能吗?任何解决方案/查询。
2.以上过程实现了分页。因此,假设我需要选择 70000 - 70010 范围内的记录。我们根据参数值应用排序,获取 0-70010 并获取前 10 条记录。而是应用排序并仅获取 70000 - 70010。还有其他方法吗?
【问题讨论】:
标签: sql-server dynamic sql-order-by case-statement sqlperformance