0

(これはRailsアプリにあります)

2 つのテーブルが与えられた場合:

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のそれぞれに 1 つずつ、2 つのインデックス

また

  • item_id、識別子の 1 つのインデックス
4

3 に答える 3

1

1つの複合インデックスはitem_id, identifier、そのようなインデックスがカバーするため、クエリに適しています。

于 2012-05-10T20:58:15.303 に答える
1

複合インデックスが必要です。2つの個別のインデックスを使用すると、mysqlはフィルタリングにインデックスを使用するかソートにインデックスを使用するかを選択する必要があります(MySQLはクエリのテーブルごとに1つのインデックスのみを使用するため)。MySQLがソート時にインデックスをどのように使用するかについての詳細(あなたのケースはそれらが与える例の1つです)。

于 2012-05-10T21:03:57.387 に答える
0

私はレールを使用したことはありませんが、B+Tree インデックスの item_id と識別子を使用することはできませんか? そこには高速なクエリがあり、結果も並べ替えられます。

于 2012-05-11T11:55:39.383 に答える