在具有 20 万行的表上执行此查询需要超过 40 秒
SELECT
my_robots.*,
(
SELECT count(id)
FROM hpsi_trading
WHERE estado <= 1 and idRobot = my_robots.id
) as openorders,
apikeys.apikey,
apikeys.apisecret
FROM my_robots, apikeys
WHERE estado <= 1
and idRobot = '2'
and ready = '1'
and apikeys.id = my_robots.idApiKey
and (my_robots.id LIKE '%0'
OR my_robots.id LIKE '%1'
OR my_robots.id LIKE '%2')
我知道这是因为查询内的计数,但我怎样才能有效地解决这个问题。
编辑:解释
谢谢。
最佳答案
使用GROUP BY
代替
SELECT my_robots.*,
count(id) as openorders,
apikeys.apikey,
apikeys.apisecret
FROM my_robots
JOIN apikeys ON apikeys.id = my_robots.idApiKey
LEFT JOIN hpsi_trading ON hpsi_trading.idRobot = my_robots.id and estado <= 1
WHERE estado <= 1 and
idRobot = '2' and
ready = '1' and
(
my_robots.id LIKE '%0' OR
my_robots.id LIKE '%1' OR
my_robots.id LIKE '%2'
)
GROUP BY my_robots.id, apikeys.apikey, apikeys.apisecret
使用显式的JOIN
语法。需要一些索引才能快速运行它,但是,从您的帖子(以及您的查询)来看,数据库结构尚不清楚。
关于mysql - 查询执行时间超过 40 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47749827/