【发布时间】:2020-10-03 09:24:23
【问题描述】:
如果您认为有 200,000 个数据很大,但加载时间超过 10 秒,您可以在下面看到我的查询是一个在大表上运行的大查询。我希望获得专家帮助以优化查询:任何建议都将受到高度赞赏。
SELECT mt5_users.Name AS Name,
Test2.Login AS SLogin,
(
SELECT COUNT(Test.Order)
FROM (
SELECT *
FROM (
SELECT MAX(`Order`) AS `Order`,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT Time SEPARATOR ","), ",", 1), ",", -1) AS OPEN_TIME,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT Time SEPARATOR ","), ",", 2), ",", -1) AS CLOSE_TIME,
MAX(Profit) AS Profit,
MAX(Storage) AS Storage,
MAX(Login) AS Login,
MAX(Action) AS Action,
MAX(Entry) AS Entry
FROM `mt5_deals_2020`
WHERE Time BETWEEN "2020-09-01" AND "2020-10-01"
AND Entry IN ("0",
"1")
GROUP BY PositionID) AS Main
WHERE OPEN_TIME != CLOSE_TIME) As Test
WHERE Login = SLogin
AND Test.Entry <> "0"
AND Test.CLOSE_TIME BETWEEN "2020-09-01" AND "2020-10-01"
AND TIMESTAMPDIFF(MINUTE,Test.OPEN_TIME,Test.CLOSE_TIME) <= "5"
AND Test.Action <= 1 ) AS Scalp,
SUM(Test2.Profit+Test2.Storage) AS Profit,
(
SELECT COUNT(mt5_deals_2020.order)
FROM mt5_deals_2020
WHERE Login = SLogin
AND mt5_deals_2020.Time BETWEEN "2020-09-01" AND "2020-10-01"
AND mt5_deals_2020.Action <= 1
AND mt5_deals_2020.Entry <> "0" ) AS Trades,
(
SELECT SUM(mt5_deals_2020.Profit+mt5_deals_2020.Storage)
FROM mt5_deals_2020
WHERE Login = SLogin
AND mt5_deals_2020.Time BETWEEN "2020-09-01" AND "2020-10-01"
AND mt5_deals_2020.Entry <> "0"
AND mt5_deals_2020.Action <= 1 ) AS PL
FROM (
SELECT *
FROM (
SELECT MAX(`Order`) AS `Order`,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT Time SEPARATOR ","), ",", 1), ",", -1) AS OPEN_TIME,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT Time SEPARATOR ","), ",", 2), ",", -1) AS CLOSE_TIME,
MAX(Profit) AS Profit,
MAX(Storage) AS Storage,
MAX(Login) AS Login,
MAX(Action) AS Action,
MAX(Entry) AS Entry
FROM `mt5_deals_2020`
WHERE Time BETWEEN "2020-09-01" AND "2020-10-01"
AND Entry IN ("0",
"1")
GROUP BY PositionID) AS Main1
WHERE OPEN_TIME != CLOSE_TIME) As Test2
LEFT JOIN mt5_users
ON Test2.Login = mt5_users.Login
WHERE mt5_users.Group IN ("KUVVARSTUSD",
"real\\KUV3VARSIUSD",
"real\\KUVVARPLUSD",
"real\\KUVVARGOUSD",
"real\\KUVVARGOEUR"
)
AND Test2.CLOSE_TIME BETWEEN "2020-09-01" AND "2020-10-01"
AND TIMESTAMPDIFF(MINUTE,Test2.OPEN_TIME,Test2.CLOSE_TIME) <= "5"
AND Test2.Action <= 1
GROUP BY Test2.Login
我需要开仓单和平仓单的时间差和其他一些数据等等里面选择我做的就是这样。
【问题讨论】:
-
您可以在您的问题中添加EXPLAIN PLAN 之类的信息吗? (更多信息:SO)
-
查询的目的是什么?对逻辑的解释以及示例数据和结果在这里会有所帮助。
标签: mysql optimization