mysql做复合索引索引个别字段吗?

时间:2012-06-15 06:04:25

标签: mysql indexing innodb compound-index

我有以下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列。

1 个答案:

答案 0 :(得分:3)

关键字列没有用,但 recordid 一个肯定是(特别是因为你在内连接上大量使用它)。第一列是主索引,第二列只是一个“决胜局”,它通常无法替代首先使用该列的另一个索引。

想想这样......说你有一个人的信息列表,先按名字排序,然后按电话号码排序。如果你需要查找一个人的名字,这个清单就不错了;您不需要按名称排序的第二个。但是如果你需要通过电话号码查找某人,那么这个名字 - 电话有序列表就像没有订单一样无用;您需要先按电话号码订购另一个清单。