跨表创建复合索引

时间:2014-10-14 15:54:06

标签: mysql

我正在做一个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);

上述方法会产生语法错误。创建使用跨表列的复合索引的正确值是多少?

1 个答案:

答案 0 :(得分:1)

当连接两个表时,服务器必须在另一侧的表中查找连接一侧的一条记录的信息。因此,两个表中的索引在这方面没有帮助。索引仅在实际查找的联接的那一侧有用。

因此,无法跨越多个表格。

查询计划程序将此考虑在内,并以使用最有效查找的方式解析连接条件。在您的示例中,查询计划程序可能首先检查cpf.entity_idp.entity_id上的索引,如果没有索引,它将搜索较小的表并尝试其他优化。 MySql的EXPLAIN可以提供进一步的见解。