1

次のスキーマを持つテーブルがあります。

CREATE TABLE IF NOT EXISTS `feeds` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `external_id` varchar(255) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `notes` text,
  `image_id` int(11) DEFAULT NULL,
  `location_id` int(11) DEFAULT NULL,
   PRIMARY KEY (`id`),
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9046 ;

私はインデックスを作成していますがexternal_idlocation_idそれらはテーブルに影響を与えるさまざまなクエリに個別に使用されることを意図しています。レコードが追加、更新、または削除されるたびに、MySQL がインデックスを再構築する必要があることを理解しています。私が理解できないのはname、このテーブルのレコードのフィールドを更新すると、どちらかまたは両方のインデックスが再構築されるかどうかです。また、これらの 2 つの個別のインデックスが、お互いのパフォーマンスに悪影響を与えることなく、このテーブルに存在できるのは事実でしょうか? お時間をいただきありがとうございます。

4

2 に答える 2

2

インデックスは「再構築」されませんが、更新されます。インデックスが作成されていない列のデータを変更しても、再インデックス アクティビティが発生することはありません。

于 2012-10-15T16:11:10.330 に答える
1

使用している MySQL ストレージ エンジンである MyISAM は、行が更新されるたびにインデックスを更新します。つまり、テーブルのインデックスが多いほど、そのテーブルから行を挿入、更新、または削除するのに時間がかかります。ただし、クエリはより高速に実行する必要があります。クエリ プランに EXPLAIN を使用することをお勧めします。

于 2012-10-15T16:42:54.027 に答える