mysqlのインデックスについて質問です。
mysqlのインデックスについて質問です。
http://archiva.jp/web/server-side/sql_02.html に、
『mysqlでは1つのクエリ実行で、1つのテーブルにつき1つのインデックスしか使用できない』
とあります。
よく以下のようなテーブル定義を見かけますが、
CREATE TABLE IF NOT EXISTS `data` (
`id` int(10) NOT NULL default '0',
`user_id` int(10) NOT NULL default '0',
`file_id` int(10) NOT NULL default '0',
`name` text collate utf8_unicode_ci NOT NULL default '',
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
idとuser_idを条件にするクエリであれば、上記制約を満たすため、
KEY `id_user_id_idx` (`id`,`user_id`)
の複合クエリを定義すれば良いのでしょうか?
また、idとuser_idとfile_idを条件にするクエリも考慮に入れた場合、
テーブル定義は以下のようにするのでしょうか?
CREATE TABLE IF NOT EXISTS `data` (
`id` int(10) NOT NULL default '0',
`user_id` int(10) NOT NULL default '0',
`file_id` int(10) NOT NULL default '0',
`name` text collate utf8_unicode_ci NOT NULL default '',
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `id_user_id_idx` (`id`,`user_id`),
KEY `id_user_id_file_id_idx` (`id`,`user_id`,`file_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
最後に、create table 時のインデックスの指定は、
INDEX `user_id` (`user_id`),
のようにもできますが、INDEXとKEYの違いは何かあるのでしょうか。
お礼
ありがとうございました