0

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

该列表可以通过单击任何表列标题来排序,例如DateNameupdated_at。这是通过将 GET 参数附加&sort=到 URL 来实现的。

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

这可能是迁移的样子:

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

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

4

2 回答 2

1

索引可用于加速排序,但如果您要识别要显示的行子集,则可能会优先选择对其有用的索引。在这种情况下,您需要复合索引。

还有其他几个问题。

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

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

您可能想看看使用另一种方法进行排序。我对使用内置 JQuery 排序的Google可视化表格感到非常满意。

于 2013-08-18T10:59:07.777 回答
-1

根据您查询数据库的方式,是的,它会给您带来性能提升。例如,每当我向表中添加外键时,我都会立即按它进行索引。为什么?我知道查询将在我的应用程序中运行。如果没有,我不会放外键。这样,尤其是当您在数据库中积累大量数据时,它肯定会带来性能提升(有时,提升幅度令人难以置信)。如果您计划通过 、 或 查询您的数据库datename那么updated at是的,根据您的查询,它可能会提高性能。否则,真的没有任何意义。

请注意,您不想为每一列添加索引。拥有必要的索引会对您有所帮助,但如果您对每一列都有一个索引,那么您将面临混淆 SQL 查询优化器并实际上阻碍您的性能的风险。

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

于 2013-08-16T21:20:40.947 回答