我正在尝试将查询结果存储在临时表中以供进一步处理。
create temporary table tmpTest
(
a FLOAT,
b FLOAT,
c FLOAT
)
engine = memory;
insert into tmpTest
(
select a,b,c from someTable
where ...
);
但是由于某种原因,插入需要一分钟,而单独的子选择只需要几秒钟。为什么将数据写入临时表而不是将其打印到我的 SQL 管理工具的输出中需要更长的时间???
更新 我的设置:具有 8 个 Debian Linux ndb 数据节点的 MySQL 7.3.2 集群 1 个 SQL 节点(Windows Server 2012)
我正在运行选择的表是 ndb 表。
我试图找出在使用“插入..”时执行计划是否会有所不同,但它们看起来是一样的:(抱歉格式化,stackoverflow 没有表格)
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <子查询3> ALL \N \N \N \N \N \N 1 PRIMARY foo ref PRIMARY PRIMARY 3 <subquery3>.fooId 9747434 使用 where 2 SUBQUERY someTable range PRIMARY PRIMARY 3 \N 136933000 使用 where 和 push 条件;使用 MRR;使用临时的;使用文件排序 3 实体化 tmpBar 全部 \N \N \N \N 1000 \N
CREATE TABLE ... SELECT 也很慢。47 秒与 5 秒没有表插入/创建。