1

リレーショナル表の主キー。純粋なリレーショナル表の複合主キーまたは固有主キーMySQL。リレーショナル表の主キー。一意のIDまたは複数の一意のキー?

で使用するにはどのデザインをお勧めしますか?高性能のために? See diagram

技術的な利点と欠点!

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

+0

http://stackoverflow.com/questions/6355479/mysql-autoincrement-compound-primary-key-performance-integrity/6356302#6356302 –

+2

によく似ています。パフォーマンスを向上させたい場合は、外部キーを完全に削除します。適切なデータベース設計と関係モデルが必要な場合は、パフォーマンスの影響を考慮せずに動作するものを使用してください。 –

+1

"パフォーマンスを必要とする場合は、外部キーを完全にドロップしてください"。それはばかげているだろう。外部キーは、いくつかのクエリの実行計画を改善してパフォーマンスを向上させることができます。どのような場合でも、制約のないスキーマは機能的にはスキーマと同等ではないため、スキーマ間のパフォーマンスの比較を開始するのは少し恣意的です。 – sqlvogel

答えて

2
それは本当にあなたがやっているクエリの種類によって異なり

...

あなたは余分なサロゲートを追加する場合は、代わりにすべての挿入のための単一の1のユニークなチェックをやって終わるだろう、更新と削除。これにより、複合キーが正しく発音されます。

しかし、他の外部キーでそのプライマリキーを常に参照している場合、複合オプションは、2倍の情報を格納することになり、結合するときにさらに作業をする必要があることを意味します。そうすれば、単一の鍵が正しく発音されます。

1

ElmasriとNavathe(Fundamentals of Database Systems)によれば、人工の主キーは不要であり、非正規化されたデザイン(POV)を持つことをお勧めします。

ジョインテーブルの場合、私は著者に同意します。それ以外の場合は、実際には人工的なキーを使っても問題ないと思います。

私は、パフォーマンスの影響がジョイン・テーブルで非常に大きいとは思わない。

1

私は@Denisに同意します、あなたのやっていることに依存します。考慮すべき点のもう1つは、InnoDBが行をPK順にディスクに格納することです。 id1 BETWEEN a AND bのようなことをしている場合、これは非常に重要です。これらの読み取りヘッドの移動は毎回約10msです。クエリの行がばらばらになっていると、その行は合計されます。正確にこれらの理由から、必要なデータを単一の行に入れることを非正規化することを検討することができます。

+0

「innodbはPK順の行をディスクに保存します」という証明にリンクしていますか?それがするためには合理的なもののようには聞こえません。 – ysth

+0

InnoDBのクラスタ化インデックスはindex + dataを順番に格納します:http://dev.mysql.com/doc/refman/5.6/en/innodb-table-and-index.html –

関連する問題