我的表中有大约 600 万行,我正在使用以下查询查询表。
SELECT * FROM FD_CPC_HISTORICAL_DATA WHERE id IN (SELECT MAX(id) FROM FD_CPC_HISTORICAL_DATA WHERE fb_ads_account_id=1462257067274960 AND created_at BETWEEN '2019-12-13 00:00:00' AND '2019-12-13 23:59:59' GROUP BY source_text) \G
我已经为 fb_ads_account_id、created_at、source_text 创建了索引。 id 是主键。
我的问题是,即使我已经创建了索引,为什么这个查询需要大约 9 秒才能得到结果?
有没有其他方法可以更高效地创建此查询?
这里是mysql explain命令解释
最佳答案
这是您的查询:
SELECT hd.*
FROM FD_CPC_HISTORICAL_DATA hd
WHERE hd.id IN (SELECT MAX(hd2.id)
FROM FD_CPC_HISTORICAL_DATA hd2
WHERE hd2.fb_ads_account_id = 1462257067274960 AND
hd2.created_at >= '2019-12-13' AND
hd2.created_at < '2019-12-14'
GROUP BY source_text
);
我建议这样写:
SELECT hd.*
FROM FD_CPC_HISTORICAL_DATA hd
WHERE hd.fb_ads_account_id = 1462257067274960 AND
hd.id = (SELECT MAX(hd2.id)
FROM FD_CPC_HISTORICAL_DATA hd2
WHERE hd2.fb_ads_account_id = hd.hd.fb_ads_account_id AND
hd2.source_text = hd.source_tx AND
hd2.created_at >= '2019-12-13' AND
hd2.created_at < '2019-12-14'
);
对于此查询,您需要在 FD_CPC_HISTORICAL_DATA(fb_ads_account_id, source_text,created_at)
上建立索引。
关于mysql - 需要一个sql高效查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59345852/