通过添加索引来提高Rails应用程序的性能?

时间:2013-08-16 19:41:27

标签: ruby-on-rails ruby database activerecord

在我的Rails应用程序中,我有一个索引视图,列出了我的所有projects

可以通过单击任何表格列标题对此列表进行排序,例如DateNameupdated_at等。这是通过在网址上附加&sort= GET参数来实现的。

我的问题是:从性能的角度来看,建议在我的数据库中为这些列添加索引吗?

这就是迁移的样子:

class AddMoreIndexes < ActiveRecord::Migration
  def change
    add_index :projects, :date
    add_index :projects, :name
    add_index :projects, :update_at
  end
end

我会从中获得任何性能提升吗?

2 个答案:

答案 0 :(得分:1)

索引可用于加快订单速度,但如果您要识别要显示的行的子集,则可能会优先选择对此有帮助的索引。在这种情况下你需要复合索引。

还有其他一些问题。

首先,对索引字符串值进行排序可能需要使用语言排序的索引,而不是常规的ASCII /二进制排序,因此多语言应用程序可能根本没有帮助。

其次,它可以阻止数据库的规范化,因为您确实需要显示值在您选择的表中。

您可能希望使用其他方法进行排序。我一直非常高兴使用Google visualisation tables,它内置了JQuery排序。

答案 1 :(得分:-1)

根据您查询数据库的方式,然后是,它会为您带来性能提升。例如,每当我向表中添加外键时,我都会立即对其进行索引。为什么?我知道查询将在我的应用程序中运行。如果没有,我就不会放一把外键。通过这种方式,特别是当您在数据库中累积大量数据时,它肯定会带来性能提升(有时候会产生令人难以置信的数量)。如果您计划按datenameupdated at查询数据库,那么是的,根据您的查询,它可能会带来性能提升。否则,真的没有意义。

注意,您不希望为每列添加索引。拥有必要的索引会对您有所帮助,但是如果每个列都有索引,那么您就有可能混淆SQL查询优化器并实际阻碍您的性能。

我的建议:为表中的每个外键添加一个索引,但是如果你还在运行其他列的重量查询,那么也要在那里添加一个索引。