日期:2014-05-17  浏览次数:20595 次

CTE,内连接用于千万级数据执行效率的问题
此问题源于这个:http://bbs.csdn.net/topics/390414239
当表中的数据为1000W这样的数量级时,两者效率相差无几。
但是,当表里的数据量为6000W时,两个方法的效率出现了明显差异
执行结果:
内连接 用时2:16:28 (12853950 行受影响)
表 'zzz'。扫描计数 2,逻辑读取 1588718 次,物理读取 1102 次,预读 794133 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

CTE 用时18:50 (12853950 行受影响)
表 'zzz'。扫描计数 2,逻辑读取 1588718 次,物理读取 875 次,预读 793743 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
客户端统计信息结果

请教各位大侠,造成两种方法效率相差近十倍的原因

------解决方案--------------------
http://www.cnblogs.com/worfdream/articles/2840582.html
------解决方案--------------------
去看了半天也没找到你跑的是那两个语句
麻烦贴一下。
------解决方案--------------------
不管哪种,都需要索引正确才行

convert(int,(SUBSTRING(p.dealsj,1,4)))-convert(int,(SUBSTRING(c.dealsj,1,4)))<=130 
则怎么也无法利用索引了
------解决方案--------------------
如果结果集的记录数少,排序应该开销不大了