1

我有以下 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_idINNER JOIN编辑到我的主记录表的 id 列的。

4

1 回答 1

3

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

可以这样想……假设您有一个人员信息列表,首先按姓名排序,然后按电话号码排序。如果你需要查一个人的名字,这个列表就更好了;您不需要仅按名称订购的第二个。但是如果你需要通过电话号码查找某人,那么这个名字-电话顺序列表就像根本没有顺序一样毫无用处;您首先需要另一个按电话号码排序的列表。

于 2012-06-15T06:10:36.783 回答