如何在Rails中正确指定多列索引

时间:2012-11-08 21:58:57

标签: mysql ruby-on-rails postgresql indexing

如此问题所示: How do I make a column unique and index it in a Ruby on Rails migration?
你可以写:

add_index :the_table, [:foo_column, :bar_column], unique: true

添加多列索引 但是,是否仍然需要为已经指定多列索引的每个列添加单个索引?

我的意思是写下面代码以下上面显示的代码。

add_index :the_table, :foo_column  
add_index :the_table, :bar_column

1 个答案:

答案 0 :(得分:19)

对于MySQL:

MySQL将能够使用索引[:foo_column,:bar_column]来查询两列的条件,还可以查询左列的条件,但不能查询右列。

此处有更多信息:http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html

所以你应该做

add_index :the_table, [:foo_column, :bar_column], :unique => true
add_index :the_table, :bar_column

确保正确索引所有内容

MySQL从左到右索引列,所以如果你有这样的多列索引:[:col1, :col2, :col3, :col4],你可以查询这个索引:

  • COL1
  • col1 + col2
  • col1 + col2 + col3
  • col1 + col2 + col3 + col4

因此,您可以查询最左侧的列

如果您还需要其他任何内容,则必须创建更多索引

同样,这只适用于MySQL,postgres的工作方式可能不同