我有2个表:产品和类别。每个类别都有很多产品,产品可以属于多个类别。
产品
product_id - int primary auto increment
name - unique
etc.
类别
category_id - int primary auto increment
name - unique
etc.
我有很多关系的第三张表。
products_categories
product_id -> foreign key: products.product_id
category_id -> foreign key: category.category_id
我的问题是:我应该在 product_categories 中为product_id
和category_id
创建索引,以便更快地选择查询,如果是,那么索引是什么?
由于
答案 0 :(得分:2)
这取决于最常见的查询。
您最终可能会有三个索引。
如果您有... 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)
上的索引也是如此。因此,最终可能会有两个索引(而不是三个)覆盖所有频繁的查询需求。
答案 1 :(得分:1)
你肯定应该创建索引,因为FOREIGN KEY约束没有说明约束的源字段,因此它不会自动创建索引。
对于问题“哪个索引”你当然不想要一个唯一索引 - 我会坚持使用BTREE的默认索引。