【发布时间】:2014-09-29 18:59:29
【问题描述】:
这是我的查询:
SELECT u0_.value AS value0, u1_.property_uri AS property_uri1, count(u0_.id) AS sclr2, u2_.service_id AS sclr3
FROM usc_connection_triple u0_
INNER JOIN usc_pro1_ ON u0_.property_id = u1_.id AND (u1_.status = 1)
INNER JOIN usc_account_connection u3_ ON u0_.account_connection_id = u3_.id AND (u3_.status = 1)
INNER JOIN usc_service_subscriber u2_ ON ((u2_.id = u3_.account_1_id OR u2_.id = u3_.account_2_id)) AND (u2_.status = 1)
WHERE (u1_.create_analytics = '1') AND (u0_.status = 1) GROUP BY u2_.service_id, u0_.property_id, u0_.value;
我在 u0_(usc_connection_triple) 上创建了一个索引,定义如下:
CREATE INDEX `temp` ON usc_connection_triple(property_id, account_connection_id, status, value);
这个复合索引效果很好,“解释”命令还显示 mysql 优化器正在使用它的提示,如下所示:
但是,只有当 'value' 列(type 'varchar')长度为 每当我将此列修改为更高的长度时,索引的“值”长度仅保持最大 255(假设是,我并不担心)并且 mysql 优化器完全丢弃索引(相反,它使用 property_id 外键索引)。解释命令现在显示:
所以,我的问题是:
- 为什么 mysql 优化器会丢弃这个?
- 除了“USE INDEX”/“FORCE INDEX”命令之外,还有其他更好的方法可以通过修改索引来使该索引正常工作吗?
- 我可以使用三列索引丢弃第四个“值”列吗?我试过了,但似乎仍然没有被使用。
【问题讨论】:
-
最大索引长度为 255
标签: mysql sql optimization indexing