Sql server 行号分页的SQL Server查询性能问题

Sql server 行号分页的SQL Server查询性能问题,sql-server,Sql Server,请告诉我,为什么在使用HERE results.ROWNUMBER BEVER 1和50子句时,row_number paging函数会出现性能问题。ROWNUMBER BEVER 1和50子句需要2分钟以上,但在我对where子句进行注释时会在5秒钟内运行,where子句将返回整个结果集,返回大约623条记录 我看到查询使用的是相同的索引,但是当使用where子句时,下面两个表的逻辑读取以指数方式增加,我一直在尝试解决这个问题,非常感谢您的帮助 谢谢 当使用where子句时 表'jdo'。扫描

请告诉我,为什么在使用HERE results.ROWNUMBER BEVER 1和50子句时,row_number paging函数会出现性能问题。ROWNUMBER BEVER 1和50子句需要2分钟以上,但在我对where子句进行注释时会在5秒钟内运行,where子句将返回整个结果集,返回大约623条记录

我看到查询使用的是相同的索引,但是当使用where子句时,下面两个表的逻辑读取以指数方式增加,我一直在尝试解决这个问题,非常感谢您的帮助

谢谢

当使用where子句时

表'jdo'。扫描计数15416,逻辑读取144336865,物理读取0,预读0,lob逻辑读取0,lob物理读取0,lob预读0。 表“工作台”。扫描计数16,逻辑读取70965478,物理读取0,预读0,lob逻辑读取0,lob物理读取0,lob预读

注释where子句时

表'jdo'。扫描计数16,逻辑读取18501,物理读取0,预读0,lob逻辑读取0,lob物理读取0,lob预读0。 表“工作台”。扫描计数0,逻辑读取0,物理读取0,预读读取0,lob逻辑读取0,lob物理读取0,lob预读读取0

将统计信息设置为ON 去 所有结果如下 选择 t5.*,按功能组名称描述ROWNUMBER排序的行号 从…起 选择 t0.JDOID,t0.ACCEPTCODE,t0.ACCEPTCODE 824,t0.ACKDATE,t0.UTILITY, t0.方向,t0.文档引用编号,t3.描述功能组名称, t0.INTERCHANGE_JDOID,t0.MODIFIEDBY,t0.MODIFYDATE,t0.PROCESSDATE, t0.SENTDATE,t0.SETID,t0.STATUS,t0.turn, t0.PARTNER,t0.NETWORKID,t1.INTERCHANGECONTROLNUMBER,t1.TRADINGPARTNERPAIR\u JDOID, TRANSLATIONJOBID=CASE 当t0.TRANSLATIONJOBID为NULL或t0.TRANSLATIONJOBID= 然后t1.TRANSLATIONJOBID ELSE t0.TRANSLATIONJOBID 终止 从…起 使用NOLOCK将JDO记录为t0 内连接 t0上的INTERCHANGEJDO t1。INTERCHANGE_JDOID=t1.JDOID 内连接 t1上的TRADINGPARTNERPAIRJDO t3.TradingPartnerPairJDOID=t3.JDOID 哪里 t0.direction='I' 和t0.processDate>=“2019-07-18 00:00:00”
和t0.processDate我强烈建议学习空白和换行符;SQL是不可能读取的。别名毫无意义这一事实也无济于事:。是否还需要所有这些NOLOCK提示,尤其是针对一个视图对象?你明白它的含义吗?我怀疑存在嵌套循环问题。也许您可以删除除获取所需记录所需的字段和表之外的所有内容。我发现,有时先关注关键点会更容易高效地获得所需的记录。一次细化一个步骤可以显示问题所在的步骤。这个问题很复杂。优化器正试图给你你想要的东西,但也许你可以用不那么复杂的方式来要求同样的东西。