在我的Rails应用程序中,我有一个索引视图,列出了我的所有projects
。
可以通过单击任何表格列标题对此列表进行排序,例如Date
,Name
,updated_at
等。这是通过在网址上附加&sort=
GET参数来实现的。
我的问题是:从性能的角度来看,建议在我的数据库中为这些列添加索引吗?
这就是迁移的样子:
class AddMoreIndexes < ActiveRecord::Migration
def change
add_index :projects, :date
add_index :projects, :name
add_index :projects, :update_at
end
end
我会从中获得任何性能提升吗?
答案 0 :(得分:1)
索引可用于加快订单速度,但如果您要识别要显示的行的子集,则可能会优先选择对此有帮助的索引。在这种情况下你需要复合索引。
还有其他一些问题。
首先,对索引字符串值进行排序可能需要使用语言排序的索引,而不是常规的ASCII /二进制排序,因此多语言应用程序可能根本没有帮助。
其次,它可以阻止数据库的规范化,因为您确实需要显示值在您选择的表中。
您可能希望使用其他方法进行排序。我一直非常高兴使用Google visualisation tables,它内置了JQuery排序。
答案 1 :(得分:-1)
根据您查询数据库的方式,然后是,它会为您带来性能提升。例如,每当我向表中添加外键时,我都会立即对其进行索引。为什么?我知道查询将在我的应用程序中运行。如果没有,我就不会放一把外键。通过这种方式,特别是当您在数据库中累积大量数据时,它肯定会带来性能提升(有时候会产生令人难以置信的数量)。如果您计划按date
,name
或updated at
查询数据库,那么是的,根据您的查询,它可能会带来性能提升。否则,真的没有意义。
注意,您不希望为每列添加索引。拥有必要的索引会对您有所帮助,但是如果每个列都有索引,那么您就有可能混淆SQL查询优化器并实际阻碍您的性能。
我的建议:为表中的每个外键添加一个索引,但是如果你还在运行其他列的重量查询,那么也要在那里添加一个索引。