派生テーブルについて メイン クエリに派生テーブルが含まれている場合、または SELECT ステートメントに UNION 句が含まれている場合、または SELECT ステートメントにフィールドの ORDER BY 句 (別のフィールドの GROUP BY 句) が含まれている場合、クエリを完了するために、MySQL は一時的な結果セットを格納するための一時テーブルを自動的に作成する必要があります。この一時テーブルは MySQL 自体によって作成および管理され、自動的に作成された一時テーブルと呼ばれます。自動的に作成された一時テーブルの場合、メモリ一時テーブルのパフォーマンスの方が優れているため、MySQL は常にメモリ一時テーブルを最初に使用します。メモリ一時テーブルが大きくなりすぎて一定のしきい値に達すると、メモリ一時テーブルは外部メモリ一時テーブルに変換されます。つまり、外部メモリ一時テーブルは、ストレージスペースの観点からメモリ一時テーブルの拡張です。メモリ内の一時テーブルを外部メモリ内の一時テーブルに変換するためのしきい値は、システム変数 max_heap_table_size と tmp_table_size の小さい方の値によって決まります。 派生テーブルは通常、from 句で使用されます。のように: 一時テーブルについて 非常に大きなテーブルで作業する場合、大量のデータの小さなサブセットを取得するために、多数のクエリを実行する必要がある場合があります。テーブル全体に対してこれらのクエリを実行するのではなく、MySQL で一度にいくつかの必要なレコードを検索し、そのレコードを一時テーブルに選択して、それらのテーブルに対してクエリを実行する方が高速な場合があります。 一時テーブルの作成は簡単です。通常の CREATE TABLE ステートメントに TEMPORARY キーワードを追加するだけです。 一時テーブル tmp_table を作成します ( 名前 VARCHAR(10) NOT NULL, 値 INTEGER NOT NULL ) 一時テーブルは、MySQL への接続期間中存在します。切断すると、MySQL は自動的にテーブルを削除し、使用されていたスペースを解放します。もちろん、接続したままテーブルを落としてスペースを空けることもできます。 tmp_table という名前の一時テーブルを作成するときに、データベース内に tmp_table という名前のテーブルがすでに存在する場合、一時テーブルは必然的に非一時テーブル tmp_table をマスク (非表示) します。 一時テーブルを HEAP テーブルとして宣言する場合、MySQL では、メモリ内に作成するように指定することもできます。 一時テーブル tmp_table を作成します ( 名前 VARCHAR(10) NOT NULL, 値 INTEGER NOT NULL ) タイプ = ヒープ HEAP テーブルはメモリに格納されるため、HEAP テーブルに対して実行するクエリは、ディスク上の一時テーブルに対して実行するクエリよりも高速になる可能性があります。ただし、HEAP テーブルは一般的なテーブルとは多少異なり、独自の制限があります。詳細については、MySQL リファレンス マニュアルを参照してください。 前述のように、一時テーブルをテストして、大規模なデータベースに対してクエリを実行するよりも実際に高速かどうかを確認する必要があります。データが適切にインデックスされている場合、一時テーブルはまったく高速化されない可能性があります。 1. 一時テーブルが MySQL から切断されると、システムは一時テーブル内のデータを自動的に削除しますが、これは次のステートメントによって作成されたテーブルに限定されます。 フィールドを定義します。 一時テーブル tmp_table を作成します ( 名前 VARCHAR(10) NOT NULL, 値 INTEGER NOT NULL ) 2) クエリ結果を一時テーブルに直接インポートする
2. さらに、MySQL ではメモリ内に直接一時テーブルを作成することもできます。メモリ内にあるため、速度が非常に速くなります。構文は次のとおりです。 一時テーブル tmp_table を作成します ( 名前 VARCHAR(10) NOT NULL, 値 INTEGER NOT NULL ) タイプ = ヒープ 3. 上記の分析から、一時テーブルのデータがクリアされることがわかります。切断すると自動的にクリアされます。ただし、SQL ステートメントを発行するたびにプログラムがデータベースに接続することは不可能です (この場合、心配している問題が発生します。そうでない場合は問題はありません)。データベース接続が切断されたときにのみデータがクリアされるためです。データベース接続で複数の SQL ステートメントを発行した場合、システムは一時テーブル データを自動的にクリアしません。 以下もご興味があるかもしれません:
|
<<: Nodeはリクエスト追跡にasync_hooksモジュールを使用します
この記事の例では、円形の水のアニメーションを実現するためのキャンバスの具体的なコードを参考までに共有...
この例では、デバッグ用の MySQL データベースをダウンロードしてインストールする必要があります。...
1. 引き続き PHP スクリプトを使用して実行します。コマンドラインに入力: php /home/...
おそらく、この記事にこのようなタイトルを付けると、誰かがこう尋ねるでしょう。「なぜまだテーブルに注目...
1. レスポンシブ デザインとは何ですか?レスポンシブデザインとは、ウェブサイトの開発プロセス中に、...
目次準備する5つの武器…のためにオブジェクト.キーオブジェクト.getOwnPropertyName...
質問最近、SSH フレームワークを使用して実用的なプロジェクトを完了していたときに、長い間悩まされて...
コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...
今日、私は公開用の動的なウィンドウ スタイルを設計しましたが、マウスで入力をクリックしたときにブラウ...
目次1. beforeCreateとcreated関数2. beforeMountとmount関数3...
sshd SSH は Secure Shell の略で、アプリケーション層のセキュリティ プロトコル...
目次1. 監視ポート関係の説明操作する2. 監視サービス関係の説明操作する3. テンプレートのインポ...
目次序文コンセプト安定意味使用シナリオコードVueでの使用スロットリング意味使用シナリオコードVue...
今日は、ローカルの Docker プロジェクト イメージを dockerhub に公開する方法を紹介...
EXPLAIN は、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合す...