Yad*_*ada 4 mysql sql indexing
我们在 MySQL 中有下表。
CREATE TABLE `user_team` (
`user_id` int(11) NOT NULL,
`team_id` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`user_id`,`team_id`),
KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
KEY user_id (user_id)这里需要吗?我记得在某处读到过,复合索引的第一列自动有一个索引。好像找不到来源。
来自 MySQL文档:
如果表具有多列索引,则优化器可以使用索引的任何最左边的前缀来查找行。例如,如果您在 (col1, col2, col3) 上有一个三列索引,则您在 (col1)、(col1, col2) 和 (col1, col2, col3) 上具有索引搜索功能。
使用您的示例索引(user_id, team_id),仅在 上进行的查询过滤user_id可以使用此索引,因为 B 树首先在此字段上建立索引。之后它也按 进行分割team_id并不重要,因为您只是查找匹配或不匹配某个user_id或多个特定值的所有记录。
现在,如果您还想支持仅对 进行过滤的查询team_id,那么您将需要添加至少一个其他索引。在这种情况下,您当前的复合索引将不涵盖此类查询。