如此问题所示:
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
答案 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]
,你可以查询这个索引:
因此,您可以查询最左侧的列
如果您还需要其他任何内容,则必须创建更多索引
同样,这只适用于MySQL,postgres的工作方式可能不同