为什么不在查询中使用索引?

时间:2014-08-03 18:38:42

标签: mysql optimization indexing

查询如下:

EXPLAIN EXTENDED 
SELECT u0_.value AS value0, u1_.property_uri AS property_uri1, u2_.service_id AS sclr2, count(u0_.id) AS sclr3 
FROM usc_account_triple u0_ 
INNER JOIN usc_account_connection u3_ ON ((u0_.service_subscriber_id = u3_.account_2_id))
INNER JOIN usc_service_subscriber u2_ ON ((u3_.account_1_id = u2_.id)) 
INNER JOIN usc_property u1_ ON u0_.property_id = u1_.id AND (u1_.status = 1) 
WHERE (u1_.create_analytics = '2') AND (u0_.status = 1) AND (u3_.status = 1) 
      AND (u2_.status = 1) GROUP BY u0_.property_id, u0_.value, u2_.service_id;

这里,与其他表的索引一起,我试图在表格上创建索引&usc_service_subscriber'表格如下:

CREATE INDEX `temp` ON usc_service_subscriber(id, status, service_id);

但是,不幸的是,索引没有被优化器选中。这是解释命令返回的内容:

|  1 | SIMPLE | u2_ | eq_ref | PRIMARY,temp | PRIMARY | 8 | bootsat.u3_.account_1_id          | 1 | 100.00 | Using where

任何想法为什么?索引的组合或排序有什么问题吗?

1 个答案:

答案 0 :(得分:0)

您可以使用语法FORCE INDEX (index_name)强制使用索引但据我所知,在您的情况下,由于选择的行太少而未使用索引。

根据你发布的解释结果,它看起来只有1行被提取/选择,这可能是因为没有使用索引的原因。

有关MySQL索引提示的更多信息,请参阅Here