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 ;

然后我添加了一个唯一索引,它涵盖了usersIDuserTypesID

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

是否值得我再添加 2 个索引,一个上一个usersID,另一个上userTypesID例如:

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

理论上索引本身(usersID, userTypesID)也将充当索引usersID,因为它是最左边的列。

您也将从索引中受益userTypesID

于 2012-10-30T16:09:12.027 回答
1

您不需要额外的索引,请参见此处。也试试 SHOW INDEXES FROM my_table

于 2012-10-30T16:19:19.043 回答