代码之家  ›  专栏  ›  技术社区  ›  no one special

MySQL多对多最优索引

  •  1
  • no one special  · 技术社区  · 7 年前

    我有一个表的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_id photo_id 或者两者兼而有之?

    1 回复  |  直到 7 年前
        1
  •  1
  •   KaeL    7 年前

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

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

    检查链接 Composite Keys 了解有关如何利用其性能的更多信息。

    SO Question 还将根据您的数据库配置提供一些关于复合键的秘密( InnoDB / MyISAM )。

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