MySQL多对多最优索引

MySQL多对多最优索引,mysql,many-to-many,Mysql,Many To Many,对于表,我有以下MySQL代码: CREATE TABLE `tag_to_photo` ( `tag_id` INT UNSIGNED NOT NULL, `photo_id` INT UNSIGNED NOT NULL, PRIMARY KEY (`tag_id`, `photo_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 如果我要同时搜索两个:固定到照片的所有标签和固定到标签的所有照片,如何优化定义索引?我假设主键可以组合。但是我应该

对于表,我有以下MySQL代码:

CREATE TABLE `tag_to_photo` (
  `tag_id` INT UNSIGNED NOT NULL,
  `photo_id` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`tag_id`, `photo_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

如果我要同时搜索两个:固定到照片的所有标签和固定到标签的所有照片,如何优化定义索引?我假设主键可以组合。但是我应该为
标记id
照片id
或两者定义额外的索引吗?

多个列索引称为
复合键
,您不需要为所述列添加单独的索引,因为
主复合键
就足够了,假设您的大多数查询与此类似:

SELECT  ...
    FROM tag_to_photo
    WHERE tag_id = ...
        AND photo_id = ...
查看链接以了解有关如何利用其性能的更多信息

这还将根据您的数据库配置提供一些关于复合键的秘密信息(
InnoDB
/
MyISAM


当表变大时,可能会出现
INSERT
/
UPDATE
查询变慢的情况。届时,我们可以分析执行计划,了解我们可以做些什么,以及如何实现它们,以优化您的查询。

我将只提供以下四个方面:选择tag_id FROM tag_to_photo,其中photo_id=。。。;从标记到标记id=。。。或/和标记_id=。。。和/或。。。;我注意到tag_id(大部分)出现在您的查询中。只需注意复合键的最左边索引规则,就可以了。