5

私はピボットテーブルを持っています。もちろん、すべての行がクエリに含まれます:

mysql> select * from blog_posts as bp 
       join blog_joins as bj 
       on bj.post_id=1 
       and bj.taxonomy_id=10
       and bj.type = 1;

これが私のテーブル構造です:

列ごとにインデックスを作成することをお勧めしますか? そうでない場合、なぜ、何をお勧めしますか?

mysql > alter table blog_joins add index pid (post_id);
mysql > alter table blog_joins add index tid (taxonomy_id);
mysql > alter table blog_joins add index tp (type);
4

2 に答える 2

5

その特定のクエリでは、おそらく複数列のインデックスの恩恵を受けるでしょう:

alter table blog_joins add index pid_tid_tp (post_id,taxonomy_id,type);

コードのプロファイリングをお勧めします。実際のデータをテスト データベースに追加し、いくつかの異なるインデックスを試してみてください。MySQL が各クエリに実際に使用EXPLAINするインデックスを確認するために使用します。

テストが終了したら、未使用のインデックスをすべて削除します。インデックスはクエリを高速化できますが、テーブルへの変更も遅くなるからです。

于 2012-06-23T09:53:32.413 に答える
2

3列すべてにインデックスが必要です

create index bjind on blog_joins (post_id, taxonomy_id, `type`);
于 2012-06-23T09:57:41.517 に答える