3

4列のInnodbテーブルを作成しています。

テーブル

 column_a (tiny_int)
 column_b (medium_int)
 column_c (timestamp)
 column_d (medium_int)

 Primary Key -> column_a, column_b, column_c

論理的な観点から、列A、B、Cを一緒にPKにする必要がありますが、パフォーマンスを向上させ、インデックスから直接読み取ることができるようにするために(インデックスを使用)、4つの列すべてで構成されるPKを検討しています(A 、B、C、D)。

質問

Innodbテーブルの主キーに追加の列を追加した場合のパフォーマンスはどうなりますか?

考慮事項

  • 代理主キーは絶対に問題外です
  • このテーブルには他のインデックスは存在しません
  • テーブルは読み取り/書き込みを多用します(どちらもほぼ等しい)

ありがとうございました!

4

2 に答える 2

1

InnoDB では、PRIMARY KEYインデックス構造にすべての非キー フィールドが含まれており、インデックス クエリと行の削除をカバーするために自動的に使用されます。PRIMARY KEYインデックス構造以外に別個の「データ」構造はありません。PRIMARY KEY定義自体にフィールドを追加する必要はありません。Using indexInnoDB テーブルでを使用している場合は表示されないことに注意してPRIMARY KEYください。これは、そのメッセージの追加をトリガーしない別のコード パスであるためです。

于 2013-01-08T16:47:58.947 に答える
0

考慮すべき点がいくつかあります。

  1. 問題のクエリがインデックス内のすべての列を使用しない限り、インデックスは使用されません。
  2. jeremycole が指摘するように: Innodb 構造では、すべての行データがクラスター化インデックス (PRIMARY INDEX) の B ツリー リーフ ノードに格納されます。

この概念はカバーされています: http://www.innodb.com/wp/wp-content/uploads/2009/05/innodb-file-formats-and-source-code-structure.pdf http://blog.johnjosephbachir. org/2006/10/22/everything-you-need-to-know-about-designing-mysql-innodb-primary-keys/

...そして、こちらのジェレミーのブログ投稿: http://blog.jcole.us/2013/01/07/the-physical-structure-of-innodb-index-pages/

したがって、この Innodb テーブルのすべての値を効率的に取得するには、A、B、C に対するクエリで十分です。

于 2013-01-03T20:06:21.647 に答える