MySQL多对多最优索引
对于表,我有以下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; 如果我要同时搜索两个:固定到照片的所有标签和固定到标签的所有照片,如何优化定义索引?我假设主键可以组合。但是我应该
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(大部分)出现在您的查询中。只需注意复合键的最左边索引规则,就可以了。