分页中的性能调整(SQL查询)

时间:2019-02-18 17:05:35

标签: sql sql-server

我有一个具有多个联接和条件的select查询。可以说该表具有大量记录(> 5000)。在我的应用中,我正在使用分页,并在查询末尾添加了以下内容:

OFFSET 5 * (1 - page) ROWS
FETCH NEXT 5 ROWS ONLY

其中page是用户正在查看的当前页面。 但是,这变得非常缓慢,每个查询大约需要5秒。我曾考虑过使用top关键字代替它。例如,对于第2页,我将执行top 10,并在C#侧丢弃前5行。但是,对于后期页面,它显然会比以前的方法慢。

还有其他可行的方法吗?

查询虽然很大,但很简单,只需一堆likes之类的

1 个答案:

答案 0 :(得分:0)

我忘了我第一次看到此建议的地方,所以没有链接,但是通过在仅主键的CTE上进行分页,然后将其重新连接到表以获取数据。

是这样的:

WITH Ord_CTE AS (
 SELECT {primary key column(s)}
 FROM {tables and joins}
 WHERE {conditions}
 ORDER BY {column(s)} OFFSET x ROWS FETCH NEXT y ROWS ONLY
)
SELECT {all the columns I want}
FROM {tables and joins}
INNER JOIN Ord_CTE ON {primary key column(s)}
ORDER BY {column(s)}

我不保证这会在您的情况下起作用(我曾在需要动态排序和分页的情况下使用过这种情况),但是值得尝试。