• ベストアンサー

MySQLのUNIQUE INDEXとINDEX

MySQLのUNIQUE INDEXとINDEXの使い分けで質問があります。 UNIQUE INDEXは、社員番号や学籍番号など重複がないものに対して使われ、 INDEXは名前のように重複が想定されるものに対して使われるのでしょうか? また、複数のカラムに同一のインデックスをつける場合、 CREATE INDEX idx_名前 ON 社員(氏,名) と言う感じになりますが 例えばこんなコード CREATE INDEX idx_名前 ON 社員(氏) and CREATE INDEX idx_名前 ON 社員(名) これはエラーになるんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • int3
  • ベストアンサー率34% (65/190)
回答No.1

>UNIQUE INDEXは、社員番号や学籍番号など重複がないものに対して使われ、 >INDEXは名前のように重複が想定されるものに対して使われるのでしょうか? INDEXは検索のキーとして利用したいものに設定します。 UNIQUE INDEXはその中でも、データが一意になるものにつけます。 (こうしておけば不慮の事故を回避できます。) >また、複数のカラムに同一のインデックスをつける場合、 >CREATE INDEX idx_名前 >ON 社員(氏,名) >と言う感じになりますが 複数のカラムに同一のインデックスをつけるというより、 氏、名という順で行を検索しやすいようにデータをつくっています。 なので、このインデックスでは select * from 社員 where 氏='福澤' and 名='諭吉'; としたときにインデックスが使えて行を高速に検索できますけど、 select * from 社員 where 名='諭吉'; ではこのインデックスが使えず行の検索が遅くなります。 >これはエラーになるんでしょうか? インデックスはテーブルにテーブルに対して同じものは生成できないので、 idx_名前というインデックスは2つ作成できません。 仮に、idx_名というものをつくれば、 select * from 社員 where 名='諭吉'; 上記ではできなかったこれも行を高速に検索できるようになりますが、こういう検索をする処理がないのであれば、そもそもインデックスをつくるだけ無駄になってしまいます。