Rails 4 / Postgresql:更好的READ / WRITE查询性能NULL与STRING

时间:2015-09-26 19:47:08

标签: ruby-on-rails postgresql ruby-on-rails-4

我有一个postgresql 9.4专栏' deal_status'。

在交易创建(模型)上,我必须决定属性/列' deal_status'在以下两个选项之间:

  • 要么什么也不做,让值为null(或为空,不确定当我们什么都不说时Rails会发生什么)。当用户进行交易时,我会将值从NULL更改为字符串(' deal_taken')

  • 或者在列中添加默认值' deal_not_yet_taken'。当用户进行交易时,我会将字符串(' deal_not_yet_taken')中的值更改为另一个字符串(' deal_taken')

我有非常多的行,所以我正在调查更多的表现。

我有一个名为' show_deals_available'涉及postgresql查询我试图优化性能,因为它会发生很多:

对于postgresql来说,当它执行"时,它是最好/最快/最有效的。以下查询:

1。选项1:创建交易时不给予deal_status属性的任何默认值(因此它将具有值:NULL值);并查询如下:

控制器/ deals_controller.rb

def show_deals_available
    @deal = Deal.friendly.find params[:id]
    @available_deal = Deal.where('deal_id = ? AND deal_status is NULL',
                             @deal.id).first  
    respond_to do |format|
      format.js 
    end
  end

2。选项2:创建交易时将STRING 设为默认值:' deal_not_yet_taken&#39 ;;并进行以下查询:

控制器/ deals.rb

def show_deals_available
    @deal = Deal.friendly.find params[:id]
    @available_deal = Deal.where('deal_id = ? AND deal_status = ?',
                             @deal.id, "deal_not_yet_taken").first  
    respond_to do |format|
      format.js 
    end
  end

另外,也许答案似乎更复杂。事实上,上述2个选项之间的选择也可能受到WRITE的影响:当我必须将值更改为' deal_taken'时,将表单字符串更改为另一个字符串与更改表单相比到一个字符串?

请注意,我正在使用活动记录但问题仍然适用于postgresql(我将来可能会切换到原始的postgresql)。

0 个答案:

没有答案