2

2つのフィールドをカバーするテーブルに一意のインデックスがある場合、各フィールドに別のインデックスを追加する必要がありますか?

例:

私のテーブルは次のようになります。

CREATE TABLE IF NOT EXISTS `my_table` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `usersID` int(11) NOT NULL,
  `userTypesID` int(11) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

usersID次に、との両方をカバーする一意のインデックスを追加しますuserTypesID

ALTER TABLE  `my_table` ADD UNIQUE  `usersID_userTypesID` (  `usersID` ,  `userTypesID` )

さらに2つのインデックスを追加する価値はありますusersIDuserTypesID例えば:

ALTER TABLE  `my_table` ADD INDEX (  `usersID` )
ALTER TABLE  `my_table` ADD INDEX (  `userTypesID` )

これらの追加のインデックスを追加すると、一部のクエリが高速化されますか?そのような:

SELECT      `usersID`
FROM        `my_table`
WHERE       `userTypesID` = 101

または

SELECT      `usersTypesID`
FROM        `my_table`
WHERE       `usersID` = 29
4

2 に答える 2

2

理論的には、インデックス on(usersID, userTypesID)は、それ自体がインデックス on としても機能しusersIDます。これは、一番左の列だからです。

インデックスuserTypesIDも有効です。

于 2012-10-30T16:09:12.027 に答える
1

追加のインデックスは必要ありません。こちら を参照してください。SHOW INDEXES FROM my_table も試してください

于 2012-10-30T16:19:19.043 に答える