我应该将排序键字段与外键组合索引,还是单独索引(mysql)?

时间:2012-05-10 20:51:27

标签: mysql ruby-on-rails sorting indexing foreign-keys

(这是在Rails应用程序中)

给出两个表:

items
id, int(11), primary key
name, varchar(30)

choices
id, int(11), primary key
item_id, int(11), foreign key
identifier, varchar(5)
name, varchar(30)

针对选择的大多数查询都是:

SELECT identifier, name FROM choices WHERE item_id = n ORDER BY identifier;

我们都假设我们都同意索引可以帮助排序性能(我知道我们都没有,这没关系,但是对于这个问题我们假设)。

索引选项的最佳方式是什么,以便获得搜索和排序优势:

  • 两个索引,分别针对 item_id 标识符

  • item_id,标识符
  • 上的一个索引

3 个答案:

答案 0 :(得分:1)

item_id, identifier上的1个复合索引将更适合您的查询,因为这样的索引将覆盖。

答案 1 :(得分:1)

您想要复合索引。使用2个单独的索引,mysql必须在使用索引进行过滤或使用索引进行排序之间进行选择(因为MySQL在查询中每个表只使用一个索引)。 More on how MySQL uses indexes when sorting(你的案例是他们提供的一个例子)。

答案 2 :(得分:0)

我从不使用rails但是不能使用B + Tree索引item_id和标识符吗? 在那里你会有快速查询,并对结果进行排序。