我有以下 MySQL/InnoDB 表。我在两列上都添加了一个复合索引作为主键,并且还添加了两个单列索引。使用复合索引后,单列索引是否会提高性能?还是我最好放弃它们?
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;
如果有帮助的话,这个表的主要目的是作为前向索引,所以这个表专门用于 record_id INNER JOIN
ed 到我的主记录表的 id 列。
最佳答案
keyword 列没有用处,但 recordid 列肯定有用(特别是因为您在内部联接上大量使用它)。第一列是主索引,第二列只是一个“决胜局”,它通常不能替代首先使用该列的另一个索引。
可以这样想...假设您有一个人员信息列表,首先按姓名排序,然后按电话号码排序。如果您需要查找一个人的名字,这个列表再好不过了;您不需要仅按名称订购的第二个。但是,如果您需要通过电话号码查找某人,那么这个先按姓名再按电话排序的列表就像根本没有顺序一样毫无用处;您首先需要另一个按电话号码排序的列表。
关于mysql 复合索引也索引单个字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11045404/