我有这样的查询
select org, `Balance` from oss_collection_history och2
where och2.`DateFrom` =
(select min(`DateFrom`) from oss_collection_history och3 where och3.org = och2.org)
它有效,但使用我的数据集大约需要 4 秒。
解释输出如下所示
id|select_type |table|partitions|type|possible_keys |key|key_len|ref |rows|filtered|Extra | --|------|------|----------|----|------ ----------------------------|---|--------|--------- ---|----|--------|------------| 1|初级 |och2 | |全部 | | | | |6651| 100|用在哪里| 2|相关子查询|och3 | |ref |Org,oss_collection_history_Org_IDX|Org|22 |ca1.och2.Org| 443| 100|使用索引|
我尝试添加以下指标,但似乎并没有提高性能
CREATE INDEX `oss_collection_history_Charges_IDX3`
ON oss_collection_history (`DateFrom`, `org`);
CREATE INDEX `oss_collection_history_Charges_IDX4`
ON oss_collection_history (`DateFrom`);
CREATE INDEX `oss_collection_history_Charges_IDX6`
ON oss_collection_history (`DateFrom`, `org`, `Balance`);
我为您的查询创建了一个最小、完整且可验证的示例。
此查询使用索引返回单个row-per-org以及相关的期初余额:
结果:
这个小提琴就在这里。