- ベストアンサー
複数のDBでjoinする場合のindexについて
複数のDBでJOINを多用しようと考えています。 その際のkeyは全てのDBに存在する同じフィールド(重複データのない固有のデータ)にしようと思っていますが、このフィールドにはindexを設定した方が良いのでしょうか? indexとprimaryキーの区別がよく分からないために、どのような設計にしたら良いのか困っています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
失礼ですが、概念・用語を理解しているでしょうか? まず、mysqlというサーバープログラムがあります。これが、RDBMS (Relational DataBase Management System) です。このプログラムは、複数のスキーマ(MySQLでは、これがDatabaseと同じ意味です)を管理しています。それぞれのスキーマは、その中にテーブルを初めとするデータベースオブジェクトを保持しています。 結合は、テーブル間で行われます。DB(Database)間での結合ではありません。同じRDBMSが管理する異なるスキーマ(DB)上のテーブル同士は、テーブルをスキーマ名で修飾すれば、結合できます。 主キーは、関係データベースの概念です。テーブルの1行を特定できる1つ以上のカラムの集合を意味します。関係演算では、必須です。 SQLは、RDBMSとは言いつつ、主キーのないテーブルを作れます。ただ、テーブル作成時に主キーを宣言すると、RDBMSが主キーの重複を起きないようにしてくれます。 インデックスは、テーブルを高速に検索するためのデータ構造です。検索は速くなることが多いのですが、行の更新、削除ではインデックスも変更されますので、付け過ぎは全体としての効率を落とすかもしれません。またそれなりの余計な記憶領域を必要とします。 データの分布によっては、ほとんど効かないかもしれません。たとえば、性別のカラムにインデックスを張っても、取る値は2つです。こういうカラムへのインデックスは無意味です。 主キー制約(同じものが重複しない)を実現するために、ほとんどのRDBMS(そうでないのはあるんだろうか?)は、インデックスを勝手に作成します。これが、ないと主キーの重複チェックのために、テーブル全部を見ないといけないからです。 答えです。PRIMARY KEYを宣言したら、勝手にインデックスは作られます。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
どのような検索をしたいかによってインデックスの設定は異なります。 しゃくし定規に特定のフィールドにインデックスをいいというものでは ありません。 まずは正規化をすすめ、いくつかの想定されるSQLを発行してみて、 EXPLAINで試しながら適正なチューニングをしていくとよいでしょう
お礼
どうもありがとうございました。
お礼
どうもありがとうございました。