我有以下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列。
答案 0 :(得分:3)
关键字列没有用,但 recordid 一个肯定是(特别是因为你在内连接上大量使用它)。第一列是主索引,第二列只是一个“决胜局”,它通常无法替代首先使用该列的另一个索引。
想想这样......说你有一个人的信息列表,先按名字排序,然后按电话号码排序。如果你需要查找一个人的名字,这个清单就不错了;您不需要按名称排序的第二个。但是如果你需要通过电话号码查找某人,那么这个名字 - 电话有序列表就像没有订单一样无用;您需要先按电话号码订购另一个清单。