我正在做一个JOIN
,并希望通过在连接表之间创建一个复合索引来加快速度:
SELECT * FROM catalog_product_entity AS p
INNER JOIN catalog_product_flat_1 AS cpf
ON cpf.entity_id = p.entity_id`
以类似的方式:
create index foo on catalog_product_flat_1 (entity_id,catalog_product_entity.entity_id);
上述方法会产生语法错误。创建使用跨表列的复合索引的正确值是多少?
答案 0 :(得分:1)
当连接两个表时,服务器必须在另一侧的表中查找连接一侧的一条记录的信息。因此,两个表中的索引在这方面没有帮助。索引仅在实际查找的联接的那一侧有用。
因此,无法跨越多个表格。
查询计划程序将此考虑在内,并以使用最有效查找的方式解析连接条件。在您的示例中,查询计划程序可能首先检查cpf.entity_id
和p.entity_id
上的索引,如果没有索引,它将搜索较小的表并尝试其他优化。 MySql的EXPLAIN
可以提供进一步的见解。