• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mysqlのインデックスについて質問です。)

MySQLのインデックスについての質問と回答

このQ&Aのポイント
  • MySQLのインデックスについての質問に対する回答をまとめました。
  • インデックスの複合クエリ定義についての考慮事項について解説します。
  • CREATE TABLE時のインデックス指定方法に関して、INDEXとKEYの違いについて説明します。

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

  • ベストアンサー
  • spieder
  • ベストアンサー率59% (13/22)
回答No.1

古いMySQLなら"1つのクエリで1テーブルにつき1インデックスしか使われない"というのは正しいです。しかし、新しいMySQL(ver.5.0以降)ならインデックスマージが行われるので、もし複数のIndexが使えるとオプティマイザが判断をした場合には、複数のインデックスが使われます。 ただ、例で挙がられた"idとuser_idを条件にするクエリ"の場合、PRIMARY KEYであるidカラムで1行のみに絞り込めます。わざわざ複数のIndexを使わずに、PRIMARY KEYを使って対象の1行を取り出してから"指定されたuser_idと一致するかどうか判断する"という最適化をオプティマイザが判断してしまうとuser_idのインデックスは利用されません。 また、検索条件に完全に一致したインデックスが無くても、対象行の絞込みが行える場合には、オプティマイザはインデックスを利用して対象行の絞込みを行ないます。インデックスで絞り込んだ中から条件に一致した結果を返すので、インデックスだけで絞り込んだ場合より多少遅くなりますが、まったくインデックスが無かった場合より早く結果を返せます。 また、複合カラムインデックスは、初めのカラムだけが条件に指定された場合でも有効に活用されますので、検索条件次第ですが、同じカラムの並びでインデックスを複数作成する必要はありません。 http://dev.mysql.com/doc/refman/5.1/ja/mysql-indexes.html インデックスを大量に作成すると更新時の処理が重くなるので、更新と参照のバランスを考えて必要なインデックスを作成してください。 "INDEXとKEYの違いは?"については、同じINDEX作成用の定義文なので、好みにあわせて好きなほうを使ってもらってかまいません。

参考URL:
http://dev.mysql.com/doc/refman/5.1/ja/index-merge-optimization.html

関連するQ&A