今天犯了一个想当然的错误,认为访问本地对象一定比访问远端对象快。http://www.itpub.net/337560.html
正好总结一下,引以为戒。
如果其它所有条件完全一致:比如两台服务器的硬件软件相同,数据库的版本和设置相同,查询的对象数据结果相同,包含数据量相同,两个查询的执行计划相同,甚至数据的读取来源也相同(都是从CACHE中获得或者都是从磁盘中获得),这时,由于二者的差别就是数据的物理位置不同,因此远端操作所多花费的时间就是请求消息和结果消息在网络上传送的时间。
一般情况下说访问远端数据会慢是出于两种假设:
第一种就是上面所说的其它条件完全相同的情况。
第二种是条件不完全相同,但是相差不是很多,但是由于查询语句有大量的结果需要返回,由于网络传输的速度和本地硬盘读取的速度不是一个数量级,这时候整个sql语句的瓶颈在于网络传送结果。
但是对于查询结果集很小的情况,比如查询COUNT(*)等操作,网络传输的内容很少,因此当其他差别比较明显时,比如远端数据库恰好缓冲了需要访问的表,而本地数据库中没有缓存,这时就会出现访问本地速度比访问远端数据还慢的情况。当然这种情况一般只出现在第一次。
另外,执行计划、硬件情况等不同也会影响查询的结果。
不过,对于绝大多数的情况,还是应该尽量避免访问远端数据库的。