首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

【100分】真正的疑难有关问题,相同的语句,效率天差地别!

2012-05-27 
【100分】真正的疑难问题,相同的语句,效率天差地别!!!!!!!!!!!如题,下面的是相关说明:SQL code--视图V_test:

【100分】真正的疑难问题,相同的语句,效率天差地别!!!!!!!!!!!
如题,下面的是相关说明:

SQL code
--视图V_test:select a.1,a.2,a.3,b.1,b.2,b.3 from a inner join b on a.0=b.0--语句1:Select top 15 * FROM (select ROW_NUMBER() Over(order by id) as rowId, * from V_testwhere  type=123 and zt='测试') as tempTable where rowId > 0--语句2:Select top 15 * FROM (select ROW_NUMBER() Over(order by id) as rowId, * from V_testwhere  type=123 and zt='测试') as tempTable where rowId > 15--说明,所有相关子段都加了索引,视图数据总量277万。--语句1瞬间就出来了,语句2接近一分钟才出结果--查看数据库记录,语句2逻辑读非常高--为什么?两个语句完全一样,除了最后那个分页起始条件不同!--求教各路高手不吝赐教啊[img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/54.gif][/img]


[解决办法]
rowId > 15的记录是不是很多?如果很多的话可能会导致索引失效。
[解决办法]
探讨
如题,下面的是相关说明:
SQL code

--视图V_test:
select a.1,a.2,a.3,b.1,b.2,b.3 from a inner join b on a.0=b.0

--语句1:
Select top 15 * FROM
(
select ROW_NUMBER() Over(order by id) as rowId, * from V_test
where ……

[解决办法]
顶楼上 很可能是这样的
[解决办法]
楼主最好把你的执行计划图贴出来,看看哪个部分有问题,可以优化
[解决办法]
还得考虑缓存。你贴出来看看嘛
[解决办法]
第一个优化器根本就不考虑where rowId > 0,因为rowId永远大于0,第二个就不同了
[解决办法]
探讨

第一个优化器根本就不考虑where rowId > 0,因为rowId永远大于0,第二个就不同了

热点排行