3

Innodb検索エンジンを使用してユーザールックアップテーブルへのイベントを作成しています。

テーブルEvent_Users

event_id
user_id

Index (PRIMARY) -> event_id, user_id
Index (secondary) -> user_id, event_id ??

アプリケーションは、ユーザーからイベントへ、およびイベントからユーザーへと検索します。主キーがクラスター化されている場合、2番目のインデックスを定義するにはどうすればよいですか?単純にそうすれば、MYSQLはevent_idがすでにPKに存在することを認識しますか、それとも冗長でセカンダリインデックスuser_idに含める必要がありますか?user_id, event_id

さらに、これはクラスター化されたインデックスの良い使い方ですか?Innodbクラスター化インデックスに関するガイダンスとヘルプをいただければ幸いです。ありがとう!

4

1 に答える 1

1

MySQL は、複合セカンダリ インデックスを作成せずに、PK 内のフィールドをカバリング インデックスとして使用できる必要があります。

したがって:

テーブル (エンジン = INNODB)

column_a  (int)
column_b  (int)

Primary Key -> column_a, column_b

column_b単純に index: を追加して検索したい場合column_b

テーブルは Innodb エンジンを使用しているため、PK はcolumn_bインデックスに存在します。Mysql はインデックスを使用できるようになります (インデックスを使用)。column_b, column_aこれは冗長になるため、インデックスを作成する必要はありません。- PK による inndob クラスターとすべてのインデックスが PK を参照することを忘れないでください。

column_a, column_b代理キーがまだ存在しないことを確認するために余分な作業を行う必要があるため、この設計では代理キーは適切な選択ではありません。

于 2012-12-29T13:59:33.593 に答える