sql性能优化

zhengbin215 2011-12-20 09:48:14
有两个表,TableA 主键id ,TableB 主键 TaskId,根据taskid查询所有记录, TableA内taskId有很多重复,大概一个taskid可以对应成千上万条记录, tableA大概有2000W条记录, 现在根据分页如下查询语句, tableA 在taskId上有聚焦索引, 当页码在1万以内时,很快可以达到,但是到5w页 或以上时,页面等待时间越长,有时还超时, 请问有什么办法可以优化下.
;WITH tab AS
(SELECT A.ID,A.TaskID,A.Uid,A.Email,A.Phone,A.Type,A.CreateDate,
ROW_NUMBER() OVER (ORDER BY A.InquiryID) AS RowNumber
FROM TableA AS A WITH(NOLOCK)
INNER JOIN TableB AS B WITH(NOLOCK) ON (A.TaskID = B.TaskID)
)
SELECT * FROM tab WHERE
TaskID=TaskID AND
RowNumber BETWEEN @num AND @num+20
...全文
78 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengbin215 2011-12-20
  • 打赏
  • 举报
回复
楼上很给力,谢谢. 50w内没有问题了.已经是页末了
kingtiy 2011-12-20
  • 打赏
  • 举报
回复

;WITH tab AS
(SELECT A.ID,A.TaskID,A.Uid,A.Email,A.Phone,A.Type,A.CreateDate,
ROW_NUMBER() OVER (ORDER BY A.TaskID) AS RowNumber--排序放在聚集索引上.应该会更快
--ROW_NUMBER() OVER (ORDER BY A.InquiryID) AS RowNumber
FROM TableA AS A WITH(NOLOCK)
INNER JOIN TableB AS B WITH(NOLOCK) ON (A.TaskID = B.TaskID)
)
SELECT * FROM tab WHERE
TaskID=TaskID AND
RowNumber BETWEEN @num AND @num+20

jmx123456789 2011-12-20
  • 打赏
  • 举报
回复
学习下 很少有机会碰到这么大数据量
勿勿 2011-12-20
  • 打赏
  • 举报
回复
没见过这么多页的
--小F-- 2011-12-20
  • 打赏
  • 举报
回复
分页都分到 5W页了 等高手。
oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是sql性能问题。本书是作者十年磨一剑的成果之一,深入分析与解剖oracle sql优化与调优技术,主要内容包括: 第一篇“执行计划”详细介绍各种执行计划的含义与操作,为后面的深入分析打下基础。重点讲解执行计划在sql语句执行的生命周期中所处的位置和作用,sql引擎如何生成执行计划以及如何获取sql语句的执行计划,如何从各种数据源显示和查看已经生成的执行计划。 第二篇“sql优化技术”深入分析oracle的sql优化技术,包括逻辑优化技术和物理优化技术。用大量示例详尽分析oracle 中现有的各种查询转换技术,先分析oracle如何收集、统计系统和对象的数据,然后推导各种代价估算公式,给出各种情形下的代价计算演示。 第三篇“sql调优技术”深入剖析oracle提供的各项调优技术。先对语句实际运行的性能统计数据进行了深度分析,介绍各项统计数据是由什么操作导致的以及如何统计。然后介绍如何对sql语句进行优化以获得稳定、高效的性能。最后,依据对sql优化及调优技术的分析,介绍如何快速优化sql的思路。 《oracle 高性能sql引擎剖析:sql优化与调优机制详解》内容丰富且深入,破解了oracle技术的很多秘密,适合oracle数据库管理员、应用开发人员参考。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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