注:两个数据库,结构一摸一样,并且在一个服务器上,数据库B的数据量只有数据库A的3分之一,同样的查询代码,在数据量少的数据库B上的运行时间却要比数量量大的数据库A上的运行时间还要慢。
请问各位大神,这应该是什么原因,从什么方面入手?
数据库A--运行结果如下花费0秒
(21 行受影响)
表 '表A'。扫描计数 61,逻辑读取 260184 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '表B'。扫描计数 21,逻辑读取 3849 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '表C'。扫描计数 21,逻辑读取 1272 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
数据库B---运行结果如下花费20秒
(16 行受影响)
表 '表A'。扫描计数 1,逻辑读取 3560507 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '表B'。扫描计数 0,逻辑读取 8066 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '表C'。扫描计数 1,逻辑读取 347 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
我查了 执行计划
数据库A的
select --排序----哈希匹配--后面还有很多--最后才是嵌套循环
数据库B的
select---排序---直接就是嵌套循环了
数据库A的执行计划比数据库B的要长很多
麻烦大神看看这个是什么原因造成的
数据库B的逻辑读太高了,估计是索引配置有问题,建议看一下执行计划
第二个逻辑读取数是第一个的10倍啊
检查索引,试试