私はあなたが達成しようとしていることを理解しています。さまざまなデータベースの世界へようこそ!
SQL Server 2000は、グローバルにアクセス可能な一時テーブル(例:#MyLocalTable)に対して、テーブル名に#を接頭辞として付け、セッションにローカルでアクセス可能なテンポラリテーブル(##)それぞれ## MyGlobalTableです。
SQL Server 2005およびそれ以降は、テンポラリテーブル(ローカル、グローバル)とテーブル変数の両方をサポートしています.SQL 2008およびリリース2のテーブル変数の新機能に注意してください。一時テーブルとテーブル変数の違いはあまり大きくありませんが、データベースサーバがそれらを処理する方法にあります。私は
それは、テーブル変数は常に存在すると考えるのが一般的です:-)とにかくどこから来たのか
私は、私は彼らと一緒に働いてきたものの、7、6のようなSQL Serverの旧バージョンについて話をしたくないだろうし、それはですこれは間違っています。メモリ使用量とトランザクションのデータベースサーバーボリュームに応じて、テーブル変数のページはメモリからエクスポートされ、tempdbに書き込まれ、残りの処理はtempdb内で行われます。
tempdbは、本質的に永続オブジェクトを持たないインスタンス上のデータベースですが、ソートなどのサイドトランザクションやその他の一時的な処理作業を伴う作業負荷を処理する責任があります。一方、テーブル変数(通常はデータがより小さい)はメモリに保存されているため、アクセス時間が短縮され、一時的なテーブルと比較して小さなテーブル・変数を使用する場合にtempdbドライブを使用する点でディスクIOは少なくなりますtempdbにログインします。
データの量が多い場合には、一時変数のテーブル(ローカルとグローバルの両方)を高速に処理できるように索引付けすることはできません。一時的なトランザクションによって大量のデータを処理する高速処理の場合は、選択肢がわかります。また、テーブル変数でのトランザクションだけがログに記録されず、ロールバックすることはできませんが、一時テーブルで行われたトランザクションはロールバックできます。
要約すると、テーブル変数は小さいデータのほうが優れていますが、一時的に処理される大きなデータの方が一時テーブルが優れています。また、トランザクションブロックを使用して適切なトランザクション制御が必要な場合は、テーブル変数はトランザクションをロールバックするオプションではないので、この場合は一時テーブルを使用する方がよいでしょう。
最後に、テンポラリテーブルはメモリストレスレベルに応じてテーブル変数が増加しない間は常にtempdbを使用するため、常にディスクIOを増加させます。
tempdbを調整して100%を上回るパフォーマンスを得るためのヒントが必要な場合はお知らせください。
私はあなたが認識している願っていますMySQLでは、ユーザが作成した一時テーブルは、デフォルトでメモリに格納されていません! CREATE TABLEステートメントでENGINE = MEMORYを指定した場合にのみ、テーブルはメモリに格納されます。そうしないと、デフォルトのストレージエンジン(MyISAMまたはINNODBの可能性が高い)を使用して一時テーブルが作成され、ディスクに保存されます。 複雑な結合中にMySQLによって作成された内部作成の一時テーブルと、ユーザー作成のものを混同しないでください。それらは可能であればメモリに作成されます。 –