表格(InnoDB的):
CREATE TABLE `product_category` (
`product_id` int(11),
`category_id` int(11),
PRIMARY KEY (`product_id`,`category_id`),
UNIQUE KEY `category_id` (`category_id`,`product_id`)
)
我需要在我的项目中运行以下SQL查询:
1. select `category_id` from `product_category` where `product_id`=?
2. select `product_id` from `product_category` where `category_id`=?
我为SQL查询1
创建PRIMARY KEY(product_id,category_id)
我为SQL查询2创建UNIQUE(category_id,product_id)
KEY
我想知道对吗?
可能的其他任何优化?
非常感谢
答案 0 :(得分:2)
如果您使用INNODB
引擎,则不需要第二个复合索引(在category_id,product_id
上)。仅在category_id
上有一个索引就足够了,因为所有二级索引都保留了主键的副本
答案 1 :(得分:1)
如果您已经拥有主键,则不应为这些字段创建唯一约束(如果一组列是主键,则该集也是唯一的。)
您可以将字段分别设置为唯一,但前提是您确定category_id具有单个product_id且product_id具有单个category_id。从名称中我推断出一个类别可能包含更多产品,而产品可能是更多类别的一部分。如果是这种情况,则根本不应创建唯一约束。
优化:如果您没有这么多类别或产品,您应该将这些字段定义为更小的尺寸(可能是int(5))。