我使用的是mySQL 8.0.22和phpmyadmin4.9.5。表tb是内存引擎,它在每次mysqld启动时使用--init-file查询进行预加载。
SELECT
t0.`specificID`,tb.`startfund`,tb.`endfund`,
tb.`num_IFTs`,t0.`mean`,t0.`SD`,t0.`min`,t0.`max`,
t0.`mean_over_SD`,t0.`mean-SD`,t0.`PNR`,t0.`beatG`,t0.`beatF`,
t0.`beatC`,t0.`beatS`,t0.`beatI`,t0.`deltaG`,t0.`deltaF`,
t0.`deltaC`,t0.`deltaS`,t0.`deltaI`,tb.`timeG`,tb.`timeF`,
tb.`timeC`,tb.`timeS`,tb.`timeI`
FROM `strategy_stats_0420_jan` AS t0
LEFT JOIN `strategies_memory_jan` AS tb ON t0.specificID = tb.specificID
ORDER BY `mean` DESC;这可以很好地工作。它在0.0x秒内返回。
但是,使用cte运行下一个查询根本不起作用。它会无限期地挂起。最终我放弃并重新启动mysqld。出于测试目的,我简化了查询,通常是使用UNION ALL的几个查询:
WITH
cte1 AS (
SELECT
t0.`specificID`,tb.`startfund`,tb.`endfund`,
tb.`num_IFTs`,t0.`mean`,t0.`SD`,t0.`min`,t0.`max`,
t0.`mean_over_SD`,t0.`mean-SD`,t0.`PNR`,t0.`beatG`,t0.`beatF`,
t0.`beatC`,t0.`beatS`,t0.`beatI`,t0.`deltaG`,t0.`deltaF`,
t0.`deltaC`,t0.`deltaS`,t0.`deltaI`,tb.`timeG`,tb.`timeF`,
tb.`timeC`,tb.`timeS`,tb.`timeI`
FROM `strategy_stats_0420_jan` AS t0
LEFT JOIN `strategies_memory_jan` AS tb ON t0.specificID = tb.specificID
) SELECT * FROM cte1 ORDER BY `mean` DESC;发布于 2020-10-31 04:48:40
将ORDER BY移出CTE。把它放在里面并不构成发送。
例如:
WITH
cte1 AS (
SELECT
t0.`specificID`,tb.`startfund`,tb.`endfund`,
tb.`num_IFTs`,t0.`mean`,t0.`SD`,t0.`min`,t0.`max`,
t0.`mean_over_SD`,t0.`mean-SD`,t0.`PNR`,t0.`beatG`,t0.`beatF`,
t0.`beatC`,t0.`beatS`,t0.`beatI`,t0.`deltaG`,t0.`deltaF`,
t0.`deltaC`,t0.`deltaS`,t0.`deltaI`,tb.`timeG`,tb.`timeF`,
tb.`timeC`,tb.`timeS`,tb.`timeI`
FROM `strategy_stats_0420_jan` AS t0
LEFT JOIN `strategies_memory_jan` AS tb ON t0.specificID = tb.specificID
)
SELECT *
FROM cte1
ORDER BY `mean` DESChttps://stackoverflow.com/questions/64615495
复制相似问题