这到底是做什么的(而不是传入单个列名),有什么优势?
add_index :resources, [:one, :two]
one
它在列和表two
中添加了多列索引resources
。
该声明:
add_index :resources, [:one, :two], name: 'index_resources_one_two'
相当于:
create index index_resources_one_two on resources(one, two)
传入单个列只会在该列上创建索引。例如以下行:
add_index :resources, :one, name: 'index_resources_one'
相当于:
create index index_resources_one on resources(one)
多列索引的优势在于,当您对这些多列的条件进行查询时,它会有所帮助。
与单列索引相比,当查询包含多个列上的条件时,使用多列索引,查询可以处理更小的数据子集。
例如,我们的资源表包含以下行:
one, two
1, 1
1, 1
1, 3
1, 4
以下查询:
select * from resources where one = 1 and two = 1;
如果定义了多列索引,则只需处理以下两行:
one, two
1, 1
1, 1
但是,如果没有多列索引,例如只有一个索引,one
那么查询就必须对one
等于四行的所有行起作用1
。