2011-07-15 10 views
0

Mendeley for Androidのソースコードを参照して、Martin EveによってTempテーブルが_idでテーブルのreplaceを呼び出して作成されていることがわかりました。たとえば、Collectionsテーブルの場合SQLiteデータベースでのテンポラリテーブルの使用

db.execSQL(COLLECTIONS_CREATE.replace(" (_id", "_TEMP (_id")); 

私は新しい一時テーブルを作成すると思います。これについてのこれ以上の説明は素晴らしいでしょう。さらに、データは最初に一時テーブルに挿入され、後でメインテーブルに移動されます。

私はSOから検索し、What are the use cases for temporary tables in SQL database systems?を見つけ、複雑なクエリ、並べ替え、およびパフォーマンス向上のために一時テーブルが使用されることを確認しました。誰もこの状況でどのように役立つか説明できますか?

答えて

3

テンポラリテーブルを使用すると、プログラマが単一の複雑なクエリを複数の比較的単純なクエリに分割し、プログラマが結果を一時的に保存できるようにして、コース中に異なる目的で複数回相談することができますそのたびに再インスタンス化する必要はありません。後者はまた、コンピュータの作業を容易にします。ディスクサブシステムとCPUは、言い換えれば少し休憩することができます。

前者の例としては:部長にCCで、

    the sale was in the eastern division 
        and involved one of the several new gizmos introduced last quarter 
        and occurred during the special 5-day bonanza sale 

        or 

        the sale was made by the boss's daughter 
        who floats from division to division 
        and the sale occurred at any time during the month of May 

あなたのプログラムはその後、販売のため、営業担当者を賞賛する電子メールを生成します:あなたはすべてのレコードを取得したいとしましょう。

上記のいずれかの条件を満たすレコードを取得する単一のクエリでは、扱いにくいものになる可能性があります。ちょっとしたことで脳や疲れた目が扱いにくい1つはほとんどの人生の歩みに対処しなければならない。それはもちろん、ほんの一例です。生産システムでは、条件がしばしば上記のものよりも複雑であり、ヌル値の計算やテスト、およびクエリ文が長く成長して絡み合った糸の球になる原因となるあらゆる種類の他の面倒なことが含まれます。

したがって、一時表を作成した場合は、最初の条件セットを満たす行をtemp表に移入し、2番目の条件を満たす行を取得して挿入する2番目の問合せを作成して挿入できますあなたの一時テーブルには2つのベビーステップで作業する必要があるすべての行が含まれています。

3

一時テーブルは、一時的なテーブルです。彼らはあなたが接続を閉じると、少なくともsqliteで遠ざかります。これは通常、他のDMBSの場合よりも複雑ですが、通常はデフォルトの動作です。

したがって、一時テーブルが必要な場合は常に一時テーブルが使用されます。 (冗談だよ')。 I/Oが必要ないため、パフォーマンスが向上します(これは、多くの場合、データベースのパフォーマンス上の問題の原因です)。

もう1つの使用例は、上記テーブルの内容を変更せずに永久テーブルにあるものを使用する場合です。テンポラリテーブルのパーマネントテーブルを選択し、パーマネントテーブルをそのまま使用することができます。

関連する問題