mysql-外键和索引

我有2个表格:产品和类别.每个类别都有许多产品,一个产品可以属于许多类别.

产品展示

product_id - int primary auto increment
name - unique
etc.

分类

category_id - int primary auto increment
name - unique
etc.

对于多对多关系,我有一张第三张桌子.

产品_类别

product_id -> foreign key: products.product_id
category_id -> foreign key: category.category_id

我的问题是:我应该为product_categories中的product_id和category_id创建索引以进行更快的选择查询吗?如果是,请问什么索引?

谢谢

解决方法:

这取决于哪个查询最频繁.

您可能最终得到三个索引.

>如果您有… WHERE products_categories.product_id = XXX,请在product_id上创建索引.
>与category_id相同
>如果有…,则在category_id和product_id上都创建索引… WHERE products_categories.category_id = XXX AND products_categories.product_id = YYY

但是,请记住following the MySQL manual,(category_id,product_id)上的索引可能与(category_id)上的索引冗余.同样,(product_id,category_id)上的索引可能与(product_id)上的索引冗余.因此,您最终可能会得到两个索引(而不是三个)来满足您所有的频繁查询需求.

上一篇:在使用带限制的order时避免在mysql中进行全表扫描


下一篇:创建一个索引,该索引是MySQL中另一个索引的子集