1

次の MySQL/InnoDB テーブルがあります。両方の列の主キーとして複合インデックスを追加し、2 つの単一列インデックスも追加しました。複合インデックスを配置すると、単一列インデックスからパフォーマンスが向上しますか? または、それらをドロップした方がよいでしょうか?

CREATE TABLE `keywords` (
  `keyword` varchar(100) NOT NULL,
  `record_id` int(11) NOT NULL,
  PRIMARY KEY (`keyword`,`record_id`),
  KEY `keyword` (`keyword`),
  KEY `record_id` (`record_id`),
  CONSTRAINT `keywords_record_id_records_id` FOREIGN KEY (`record_id`) REFERENCES `records` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

それが役立つ場合、このテーブルの主な目的は前方インデックスであるため、このテーブルはINNER JOIN、メイン レコード テーブルの id 列に record_id を指定して排他的に使用されます。

4

1 に答える 1

3

キーワード列は有益ではありませんが、recordid列は間違いなく有益です (特に、内部結合で頻繁に使用しているため)。最初の列はメイン インデックスであり、2 番目の列は単なる「タイブレーカー」であり、通常は最初にその列の別のインデックスを作成する代わりにはなりません。

次のように考えてみてください。最初に名前、次に電話番号で並べられた人々の情報のリストがあるとします。人の名前を調べる必要がある場合は、このリストで十分です。名前だけで並べられた 2 番目のものは必要ありません。しかし、電話番号で誰かを検索する必要がある場合、この名前、次に電話番号の順序付けられたリストは、順序がまったくないかのように役に立ちません。最初に電話番号順の別のリストが必要になります。

于 2012-06-15T06:10:36.783 に答える