我有以下表格的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
定义额外的索引,还是为两者定义?
答案 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
查询速度变慢的情况。那时我们可以分析执行计划,了解我们可以做什么以及如何实施它们来优化您的查询。