MySQL リクエストを処理する特定のシナリオでは、サーバーは内部一時テーブルを作成します。つまり、テーブルは MEMORY エンジンを使用してメモリ内で処理されるか、MyISAM エンジンを使用してディスクに保存されます。テーブルが大きすぎる場合、サーバーはメモリ内の一時テーブルをディスクに転送することがあります。
派生テーブルについて
メインクエリに派生テーブルが含まれる場合、select ステートメントに Union 句が含まれる場合、または select ステートメントに 1 つのフィールドの order by 句 (別のフィールドの group by 句) が含まれる場合クエリを完了するには、MySQL は一時結果セットを保存するための一時テーブルを自動的に作成する必要があります。この一時テーブルは MySQL 自体によって作成および維持され、自動的に作成される一時テーブルになります。自動的に作成されるテンポラリ テーブルの場合、メモリ テンポラリ テーブルのパフォーマンスが優れているため、MySQL は常にメモリ テンポラリ テーブルを最初に使用し、メモリ テンポラリ テーブルが大きくなりすぎて特定のしきい値に達すると、メモリ テンポラリ テーブルがダンプされます。外部一時テーブル。言い換えれば、外部ストレージ一時テーブルは、ストレージ空間内のメモリ一時テーブルの拡張です。メモリ一時テーブルを外部メモリ一時テーブルに転送するためのしきい値は、システム変数 max_heap_table_size と tmp_table_size の小さい方の値によって決まります。
派生テーブルは通常、from 句で使用されます。例:
select * from (select * from table) as t;
一時テーブルについて
非常に大きなテーブルを操作する場合、テーブル全体に対してクエリを実行するのではなく、大量のデータの小さなサブセットを取得するために多くのクエリを実行する必要がある場合があります。 MySQL では、一度に必要な少数のレコードを検索し、そのレコードを選択して一時テーブルに格納し、それらのテーブルに対してクエリを実行する方が高速になる可能性があります。
一時テーブルの作成は簡単です。通常の CREATE TABLE ステートメントに TEMPORARY キーワードを追加するだけです:
CREATE TEMPORARY TABLE tmp_table ( name VARCHAR(10) NOT NULL, value INTEGER NOT NULL )
一時テーブルは、MySQL に接続している間は存在します。切断すると、MySQL は自動的にテーブルを削除し、使用されていたスペースを解放します。もちろん、接続したままテーブルを下ろしてスペースを空けることもできます。
DROP TABLE tmp_table
tmp_table という名前の一時テーブルを作成するときに、tmp_table という名前のテーブルがデータベースにすでに存在する場合、一時テーブルは非一時テーブル tmp_table をマスク (非表示) する必要があります。
一時テーブルを HEAP テーブルとして宣言すると、MySQL ではメモリ内に作成されるように指定することもできます:
CREATE TEMPORARY TABLE tmp_table ( name VARCHAR(10) NOT NULL, value INTEGER NOT NULL ) TYPE = HEAP
HEAP テーブルはメモリ内に格納されるため、その上で実行するクエリは、ディスク上の一時テーブル。ただし、HEAP テーブルは通常のテーブルとは若干異なり、独自の制限があります。詳細については、MySQL リファレンス マニュアルを参照してください。
前に提案したように、一時テーブルをテストして、大規模なデータベースに対してクエリを実行するよりも実際に速いかどうかを確認する必要があります。データのインデックスが適切に作成されている場合、一時テーブルはまったく高速ではない可能性があります。
1. 一時テーブルが mysql から切断されると、システムは一時テーブル内のデータを自動的に削除しますが、これは次のステートメントで作成されたテーブルにのみ限定されます:
フィールドの定義:
CREATE TEMPORARY TABLE tmp_table ( name VARCHAR(10) NOT NULL, value INTEGER NOT NULL )
2) 直接インポートクエリ結果 一時テーブル
CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name
2. さらに、mysql では、メモリ内のすべてが非常に高速になるため、メモリ内に一時テーブルを作成することもできます。上記の分析から、構文は次のとおりです。 , データベース接続が切断されたときにのみデータがクリアされるため、複数の SQL が発行された場合、一時テーブルのデータがクリアされることがわかります。接続を切断すると自動的にクリアされます。問題ありません。データベースに接続している場合、システムは一時テーブルのデータを自動的に消去しません。
以上がMySQL 一時テーブルと派生テーブルの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。