2010-09-08 57 views
2

是什么使得检索结果10对10进行单分贝的单一数据库(MySQL的)调用的性能差异呼吁分别检索这些结果?单数据库调用VS多个数据库调用性能

如果一个比其他更好的,是有办法,我可以去检验两者之间的性能? (我只是好奇,因为如果我对性能的另一个问题以后,我可以用建议的方式来测试它自己)

回答

5

一个单一的通话将永远比几个电话为同一数据的速度更快。简单地说,网络转身和延迟本身就是一个组件,但是SQL处理的启动和拆卸也会产生一些影响。

0

单次通话效果较好。您和DB之间的往返次数减少,涉及的处理较少。减少数据传输的记录集(好吧,只有一点点)。

测试性能。你可以用编程的方式来测试它 - 你的客户端应用程序可以在2之间写入开始/停止时间,这很容易,并且显示出与客户端的性能差异。如果要查看服务器性能,可以启用常规日志(或二进制日志)并查看每个查询的性能。

1

什么是重 - 10个苹果或自行车吗?
查询不相同!。你不能用数字来比较它!
查询必须是合理的。期。不可想象的更快,但明智。做这件事就是这个地方。这是选择一个查询而不是另一个的唯一原因。

我希望你的意思是不同的查询,而不是所谓的10倍只是单一的查询。
当然,应该避免多次运行相同的查询,以及其他重复操作 - 这是基本的编程规则之一。

并回答你的未来业绩的问题 -
了解剖析

BENCHMARK <query>EXPLAIN <query>是MySQL的分析和性能调整

0

您可以轻松地做到两者之间的性能测试工具。你会做类似下面的伪代码:

start = CurrentTime() 
do 1000 times 
    for i from 1 to 10 
    query_for_one_row(i) 
    end 
end 
end = CurrentTime() 
time_for_individual_queries = (end - start)/1000 

start = CurrentTime() 
do 1000 times 
    query_for_rows(1,10) 
end 
end = CurrentTime() 
time_for_bulk_queries = (end - start)/1000 

注意,我跑每一个一千倍,因为通常在性能测试中,你测试的东西太快,除非你反复运行它始终如一地观察区别。当然,你会想要调整你的特定情况。

+0

mysql有'BENCHMARK'运算符 – 2010-09-08 21:23:16

+1

@Col。 Shrapnel没有说明开放10个连接,准备和执行10个查询的成本,或者客户端需要发生的任何事情,或者从客户端到服务器的交谈。 'BENCHMARK'只测试查询在服务器上的运行方式(也可能有用,但不包括我们感兴趣的所有成本)。我提出了一种通用的方法来测试10个小查询的全部成本与一个大查询的成本。 – 2010-09-08 21:41:04

-1

旧线,我知道......以为我会借给我的2美分反正:)

有一些不太可能的情况,其中多个呼叫可能是必要的......任何任何人,请纠正我,如果我错了这里。

我遇到了一种情况,我从数据库中提取信息并编译成一个简单的CSV ...最后,有很多数据绑定到许多表,成员,订单,订单中的项目,产品,不同的产品版本等...从字面上看,运行单个查询需要花费很长时间,您可以争辩说,数据库shema可能应该有点不同,但我解决这个问题的方式是运行数据的简单查询...然后运行单个查询和flush()数据到前端。

虽然我同意99%的情况下1个查询总是最好的,但有几个不太可能的情况,其中多个可以有所帮助。