MySQL多对多最优索引

时间:2018-03-27 07:24:02

标签: 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;

如果我要搜索两者,如何最佳地定义索引:所有标签固定到照片和所有照片固定到标签?我假设可以组合主键。但是我应该为tag_idphoto_id定义额外的索引,还是为两者定义?

1 个答案:

答案 0 :(得分:1)

多列索引称为Composite Keys,您不需要为所述列添加单独的索引,因为Primary Composite Key就足够了,假设您的大多数查询与此类似:

SELECT  ...
    FROM tag_to_photo
    WHERE tag_id = ...
        AND photo_id = ...

检查Composite Keys的链接,详细了解如何利用其效果。

SO Question还将提供有关复合键的一些内容,具体取决于您的数据库配置(InnoDB / MyISAM)。

当表变大时,可能存在INSERT / UPDATE查询速度变慢的情况。那时我们可以分析执行计划,了解我们可以做什么以及如何实施它们来优化您的查询。