4

我已经通读了这个并查看了这个,但我并不明智:

这到底是做什么的(而不是传入单个列名),有什么优势?

add_index :resources, [:one, :two]
4

1 回答 1

10

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

于 2013-08-20T18:38:34.517 回答