由于分页和order by子句,sql server中的性能问题

时间:2016-06-16 07:43:03

标签: sql .net sql-server

我们有一个mvc.net应用程序,我们是一个页面中的搜索功能。用户可以选择多个选项,然后从sql server数据库中搜索记录并以网格格式显示在页面中。所有搜索到的记录都将以排序的形式出现,并且还有分页按钮。因此,用户可以单击寻呼机按钮并转到任何页面。我们已经在sql server SP中编写了所有排序,搜索和分页登录。以下是对此

的查询
INSERT INTO #TempTable
(
  RowNumberCount,
  Field1,  
  Field2               
)
SELECT ROW_NUMBER() 
  OVER (ORDER BY   
      CASE WHEN @OrderBy = @Field1_ASC    THEN Field1 ELSE NULL END ASC,
      CASE WHEN @OrderBy = @Field1_DESC   THEN Field1 ELSE NULL END DESC,
      CASE WHEN @OrderBy = @Field2_ASC    THEN Field2 ELSE NULL END ASC,
      CASE WHEN @OrderBy = @Field2_DESC   THEN Field2 ELSE NULL END DESC,
  ,
  Field1,
  Field2              
FROM CTE_Table;

SELECT 
  Field1,
  Field2              
FROM #TempTable
  WHERE RowNumberCount BETWEEN ((@Page_Nm- 1)*@Page_Size )+ 1 AND (@Page_Nm*@Page_Size); 

我们使用了以下概念:

  1. 通过CTE搜索记录。
  2. 使用行号将CTE值插入临时表。
  3. 在行号列的帮助下应用了pagging。
  4. 由于行号将应用于从UI传递的已排序列。但是当我们运行此查询时,1缺少记录需要6到8秒。我们发现在排序列中创建行号需要时间。有没有其他方法可以改善给定查询的性能。

0 个答案:

没有答案