关于多个表分页查询时的效率问题

icefireicefire 2014-08-19 12:33:06
由于特殊需要,几个表中的部分字段相同且无法合并,现需对几个表同时查询并进行分页显示,分页时用的是ROW_NUMBER()函数。但是遇到了一个奇怪的问题,这几个表的数量量有近百万,查询页数小的时候,结果显示速度很快,只有半秒左右,但随着页数的增加,速度越来越慢,到最后的时候翻页要耗时2秒以上。不知道问题出在哪里,请高人指点。

sql语句如下:

" select top " + perpage + " * from (SELECT ROW_NUMBER() OVER (ORDER BY 序号) AS RowNo ,* from (SELECT 序号,年度,文件标题,责任者,日期 FROM [KYCQ04V15] union all SELECT 序号,年度,文件标题,责任者,日期 FROM VH4H7K921 union all SELECT 序号,年度,文件标题,责任者,日期 FROM WP4L36CSK union all SELECT 序号,年度,文件标题,责任者,日期 FROM V05UL4QV4 )as T where 1=1 and 文件标题 like '%办%' ) as T2 WHERE RowNo between " + perpage * (currentpage - 1) + " and " + perpage * (currentpage)
...全文
238 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ny-6000 2014-08-19
  • 打赏
  • 举报
回复
里,只查出序号一列 取出所需要页数据后,再关联表,取其他字段. 这样union就会快多了.
Ny-6000 2014-08-19
  • 打赏
  • 举报
回复
尽量不要用like查询,也影响速度的.
Tiger_Zhao 2014-08-19
  • 打赏
  • 举报
回复
还有符合条件的总记录数有多少,如果是几千级别的,按照上面移条件的方式改就够了。

如果更多,你可以先 COUNT(*) 取得各子表符合条件的记录数,根据分页范围:
a)一般只需要在一个子表中去分页,继续用 ROW_NUMBER()
b)最多两个子表各取一部分,可以通过 TOP n 和 ORDER BY 取首尾记录,无需计算 ROW_NUMBER() 了。
Tiger_Zhao 2014-08-19
  • 打赏
  • 举报
回复
将条件 文件标题 like '%办%' 移到内部去,每个子表先过滤,再 UNION ALL,数据量就小好多。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧