我有两个表,有百万条记录

问题描述 投票:0回答:3

我有两个表,其中有数百万条记录。我需要在这些表上应用排序、分页(最多 100 条记录)和联接。查询需要 3-8 秒才能给出结果。请建议更好的方法

这是我的询问:

; WITH TempResult AS ( SELECT ROW_NUMBER() OVER( ORDER BY col1 desc ) AS Row, col12 FROM table1 po WITH (NOLOCK) INNER JOIN table2 PV WITH(NOLOCK)  on po.col2=PV.col3  WHERE   PV.col1 = 70 AND    PV.col4 in(11, 73, 74, 75, 76, 77, 79, 80) AND PV.col5 IN (23) ) SELECT *,4910093 AS TotalRows FROM TempResult WHERE Row >= 1 AND Row <=100
sql sql-server-2008
3个回答
0
投票

使用您目前提供的内容...

IN
中删除了
PV.col5
并更改为
=

在第二个 WHERE 子句中添加了

BETWEEN

; WITH TempResult AS (
       SELECT ROW_NUMBER() OVER(ORDER BY col1 DESC) AS Row, col12 
       FROM table1 po WITH (NOLOCK) 
       INNER JOIN table2 PV WITH(NOLOCK) ON po.col2 = PV.col3  
       WHERE PV.col1 = 70 
       AND PV.col4 IN (11, 73, 74, 75, 76, 77, 79, 80) 
       AND PV.col5 = 23) 
SELECT *, 4910093 AS TotalRows 
FROM TempResult 
WHERE Row BETWEEN 1 AND 100

0
投票

在表中使用索引。时间可能会急剧下降。


0
投票

关于以下几点我有2点要与您分享。

  1. 更多的索引也可能会影响您的性能。请识别并删除表中未使用的索引。

  2. 如果您使用索引视图,那么您可以将结果集存储在 tempdb 中,并且当用户再次执行查询时可以非常快速地使用和检索结果集。

请参考此链接: http://www.codeproject.com/Articles/199058/SQL-Server-Indexed-Views-Speed-Up-Your-Select-Quer

© www.soinside.com 2019 - 2024. All rights reserved.