我应该添加多个索引吗?

时间:2012-10-30 16:05:14

标签: mysql indexing database-indexes

如果我在一个涵盖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

2 个答案:

答案 0 :(得分:2)

In theory (usersID, userTypesID)上的索引本身也会作为usersID的索引,因为它是最左边的列。

您也可以从userTypesID的索引中受益。

答案 1 :(得分:1)

您不需要其他索引see here。 还可以尝试SHOW INDEXES FROM my_table