mysql 复合索引也索引单个字段吗?

标签 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 JOINed 到我的主记录表的 id 列。

最佳答案

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

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

关于mysql 复合索引也索引单个字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11045404/

相关文章:

c# - DataTable.Columns.Clear 和列排序后的 DataAdapter.Fill NullReferenceException

oracle - 在 Oracle 中使用索引反转字符串

netbeans - 关闭 netbeans 上的索引

php - 重新索引数字数组键

MySQL:InnoDB 表的自动增量备份

MySql server 5.0.96 有时挂起

php - 数组值意外变化

php - 在一个查询中从对话中选择发送给用户的所有消息

mysql - Innodb缓冲池和多重连接

mysql - 如何在不对表进行任何更改的情况下更改表的引擎