さらに処理するために、クエリ結果を一時テーブルに保存しようとしています。
create temporary table tmpTest
(
a FLOAT,
b FLOAT,
c FLOAT
)
engine = memory;
insert into tmpTest
(
select a,b,c from someTable
where ...
);
しかし、何らかの理由で挿入には最大 1 分かかりますが、副選択だけでは数秒しかかかりません。データを SQL 管理ツールの出力に出力するのではなく、一時テーブルに書き込むのに時間がかかるのはなぜですか?
UPDATE マイ セットアップ: 8 つの Debian Linux ndb データ ノードを備えた MySQL 7.3.2 クラスター 1 つの SQL ノード (Windows Server 2012)
選択を実行しているテーブルはndbテーブルです。
「insert into ..」を使用すると実行計画が異なるかどうかを調べようとしましたが、同じように見えます:(書式設定について申し訳ありませんが、stackoverflowにはテーブルがありません)
id select_type テーブル タイプ possible_keys キー key_len ref 行 エクストラ 1 プライマリ <subquery3> すべて \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 を使用。MRR の使用; 一時的な使用; ファイルソートの使用 3 マテリアライズされた tmpBar すべて \N \N \N \N 1000 \N
CREATE TABLE ... SELECT も遅いです。47 秒 vs. テーブルの挿入/作成なしの 5 秒。