0

(这是在 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_ididentifier各一个

或者

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

3 回答 3

1

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

于 2012-05-10T20:58:15.303 回答
1

You want the composite index. With the 2 separate indexes mysql would have to choose between using an index for filtering or an index for sorting (since MySQL only uses one index per table in a query). More on how MySQL uses indexes when sorting (your case is one of the examples they give).

于 2012-05-10T21:03:57.387 回答
0

Ive never use rails but isnt it possible to use B+Tree indexing item_id and identifier? there you would have fast queries, and sorted results too.

于 2012-05-11T11:55:39.383 回答