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