相同表结构和数据的两个表,同一查询语句,查询效率区别太大?

huang_M 2014-05-09 03:54:59
问题描述:表A是存放在实际数据库中的表,它有近20万条数据,存在远端的MS服务器上。
表B是从表A中导出的表,它的数据和表A一样。存放着本地的MS服务器上。
它们的表结构如下:

查询语句:
select BTSTab_ID,Ua,Ub,Uc,DC,Tempera,Humid,Smoke,Water,Door,Mod,AirCond,
Engine,Cable,AirOutEquipt,PowerAlarmInfo,DateTime
from DataTab_HF
WHERE DateTime between '2014-03-28 00:00:00' and '2014-04-28 23:59:59'
查询的时间:对表A的查询时间要8秒,对表B的查询时间只需要1秒不到。
远端服务器是在公司内网中,为了排除网络问题,我在另一台电脑上,同时连接两个服务器,查询结果仍旧如上现象。
...全文
432 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
huang_M 2014-05-21
  • 打赏
  • 举报
回复
我在服务器上执行查询语花时8秒左右,服务器的CPU,内存占用不是很高,不过服务器上有客户端的转发服务开启。 将服务器上的数据库还原到本地,查询速度稍稍慢点6秒左右。 按照数据库引擎优化顾问的建议,建立了索引,速度明显加快,2秒不到就完成查询。 目前不懂的是,对A表(不是独立的)的查询为什么会比B表(完全与它表无关的)慢很多。排除硬件和其它环境的问题,肯定还有其它原因。
专注or全面 2014-05-09
  • 打赏
  • 举报
回复
觉得14楼说的有道理 A表的逻辑读比B表的逻辑读多了500次,这500次IO不会造成太大的影响 500次逻辑读在我本机也就200-300毫秒 反倒是A表的执行时间:耗费时间 = 8661 毫秒。 比B表的执行时间:占用时间 = 653 毫秒。 高出了不少,证明A表所在的服务器比较忙,有其他的请求占用了IO资源,使得查询得不到最快的相应
huang_M 2014-05-09
  • 打赏
  • 举报
回复
引用 14 楼 xdashewan 的回复:
这并不一定就肯定是查询的问题,你让能上服务器的去看看服务器的内存使用率和CPU占用率,一般服务器使用肯定比你本地要多,如果这两个都高,别说查询了,就是windows都会很慢
恩 我去试一下。谢谢各位了。
xdashewan 2014-05-09
  • 打赏
  • 举报
回复
这并不一定就肯定是查询的问题,你让能上服务器的去看看服务器的内存使用率和CPU占用率,一般服务器使用肯定比你本地要多,如果这两个都高,别说查询了,就是windows都会很慢
huang_M 2014-05-09
  • 打赏
  • 举报
回复
引用 10 楼 zc040921 的回复:
set statistics time on set statistics io on 在执行语句前面加上这个,看时间花在哪了
---------------------------------------------------------------------------------------------------- A表 SQL Server 分析和编译时间: CPU 时间 = 0 毫秒,耗费时间 = 0 毫秒。 SQL Server 分析和编译时间: CPU 时间 = 0 毫秒,耗费时间 = 0 毫秒。 表 'DataTab_HF'。扫描计数 1,逻辑读 3151 次,物理读 3 次,预读 3160 次。 SQL Server 执行时间: CPU 时间 = 16 毫秒,耗费时间 = 8661 毫秒。 (4600 行受影响) SQL Server 执行时间: CPU 时间 = 16 毫秒,耗费时间 = 8661 毫秒。 (2 行受影响) SQL Server 执行时间: CPU 时间 = 16 毫秒,耗费时间 = 8661 毫秒。 ------------------------------------------------------------------------------------- B表: SQL Server 分析和编译时间: CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 SQL Server 分析和编译时间: CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 (4600 行受影响) 表 'DataTab_HF'。扫描计数 1,逻辑读取 2594 次,物理读取 1 次,预读 2591 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 (2 行受影响) SQL Server 执行时间: CPU 时间 = 31 毫秒,占用时间 = 653 毫秒。
發糞塗牆 2014-05-09
  • 打赏
  • 举报
回复
先用10楼的方法测测
huang_M 2014-05-09
  • 打赏
  • 举报
回复
引用 9 楼 DBA_Huangzj 的回复:
你有没有试过就在A所在的服务器上直接执行语句?
没有,服务器不给我上。我还在试用期,怕让我搞坏了。
MootShao 2014-05-09
  • 打赏
  • 举报
回复
set statistics time on set statistics io on 在执行语句前面加上这个,看时间花在哪了
發糞塗牆 2014-05-09
  • 打赏
  • 举报
回复
你有没有试过就在A所在的服务器上直接执行语句?
huang_M 2014-05-09
  • 打赏
  • 举报
回复
引用 7 楼 DBA_Huangzj 的回复:
上执行计划。

A表

B表
發糞塗牆 2014-05-09
  • 打赏
  • 举报
回复
上执行计划。
huang_M 2014-05-09
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
重建A的索引,更新统计信息,如果还慢,把A/B两个表的执行计划贴出来

huang_M 2014-05-09
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
重建A的索引,更新统计信息,如果还慢,把A/B两个表的执行计划贴出来


我参照A表对B表建立索引,结果仍旧。
更新A表统计信息(update statistics A),查询结果仍旧。
A表




發糞塗牆 2014-05-09
  • 打赏
  • 举报
回复
重建A的索引,更新统计信息,如果还慢,把A/B两个表的执行计划贴出来
huang_M 2014-05-09
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
本地查询当然会比远程查询快
我刚开始也是这么想的,最后我都在另一台机子上对这两个表进行查询,结果仍然对A表的查询慢。
發糞塗牆 2014-05-09
  • 打赏
  • 举报
回复
本地查询当然会比远程查询快
huang_M 2014-05-09
  • 打赏
  • 举报
回复
为了优化这些查询,我是绞尽脑汁。

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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