我有三张桌子:
Orders
OrdersPromotions
Promotions
我的大部分疑问都是这样的:
SELECT `promotions`.* FROM `promotions` INNER JOIN `orders_promotions` ON `promotions`.`id` = `orders_promotions`.`promotions_id` WHERE `orders_promotions`.`orders_id` = 3 AND `promotions`.`code` = 'my_promotion_code'
所以,我从不直接获取促销,但也在订单范围内。订单不会有很多促销活动。我想知道在促销的代码栏中放置一个INDEX是否有用,知道在INNER JOIN实际上INNER JOIN之后的结果并不多,所以,可以通过它们找到它们促销代码是给定的。
在我之前的查询中,索引是否有意义,只知道此查询:
SELECT `promotions`.* FROM `promotions` INNER JOIN `orders_promotions` ON `promotions`.`id` = `orders_promotions`.`promotions_id` WHERE `orders_promotions`.`orders_id` = 3
返回不超过20行?
答案 0 :(得分:1)
您几乎总是在要用于连接,排序,分组或过滤where子句的任何字段上使用索引。我会说ALWAYS,但规则可能有例外(例如,如果你的表上有非常繁重的写入负载,很少用于索引有用的读取)。