查找表格中是否有一行:count还是first?

时间:2013-05-03 07:57:26

标签: mysql ruby-on-rails query-optimization ruby-on-rails-2

我希望对我的SQL查询进行一些优化。 没有对它进行性能测试,哪个查询最耗时?我几乎可以肯定他们会得到相同的结果。

  • !MyClass.find(:first, :conditions => c).nil?
  • MyClass.count(:conditions => c) > 0
  • MyClass.count(:conditions => c, :limit => 1) > 0

此致

2 个答案:

答案 0 :(得分:0)

您可以为自己测试它。使用少于15行代码编写性能测试。有关更多信息:

http://guides.rubyonrails.org/performance_testing.html

答案 1 :(得分:0)

我问这个问题,因为我认为答案是证据。看来没有。

所以我做了几次查询的平均时间。以下是按时间排序的结果:

.count(:conditions => c, :limit => 1) > 0;
=> 0.042037

.count(:conditions => c) > 0
=> 0.037781

.count(:select => '1', :conditions => c) > 0
=> 0.035976

.count(:select => '1', :conditions => c, :limit => 1) > 0
=> 0.034157

.find(:first, :conditions => c).nil?
=> 0.000377

.find(:first, :select => '1', :conditions => c).nil?
( equivalent to .exists?(c) )
=> 0.000184

最后一个是效率最高的。感谢:select => '1'的提示!