2011-07-15 62 views
0

我正在瀏覽Martin Eve的Mendeley for Android的源代碼,並看到通過使用_id調用表上的替換,Temp表與主表一起創建。例如在收藏表在SQLite數據庫中使用臨時表

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

我想它會創建一個新的臨時表。對此的更多解釋會很棒。進一步的數據首先被插入到臨時表中,然後移到主表中。

我通過SO搜索,發現What are the use cases for temporary tables in SQL database systems?,看到臨時表用於處理複雜的查詢,排序和提高性能。任何人都可以解釋在這種情況下它有什麼用處?

回答

3

臨時表通過讓程序員將單個複雜查詢分解爲多個相對簡單的查詢,並讓程序員臨時存儲結果以便在課程期間爲了不同的目的多次查詢它們而使程序員更容易該程序無需每次重新實例化。後者也使計算機更容易。可以說,磁盤子系統和CPU可以稍微休息一下。

前者的一個例子:假設你想獲得的所有記錄,其中:

    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 

你的程序,然後生成電子郵件稱讚爲銷售營業員,用cc到部門經理。

提取滿足上述任一條件的記錄的單個查詢可能會有點笨拙 - 對於一個厭倦的大腦或疲倦的眼睛在處理這種廢話的漫長一天後處理有點困難人們必須在大多數行業中應對。當然這是一個微不足道的例子;在生產系統中,條件往往比上述條件更加複雜,涉及計算和測試空值以及各種其他繁瑣的事情,這些事情可能會導致查詢語句變長並變成纏結紗線的球。

因此,如果您創建了臨時表,則可以使用滿足第一組條件的行填充臨時表,然後編寫第二個查詢來抓取滿足第二組條件的行,然後插入它們進入臨時表,並且 - 您的臨時表包含您需要使用的所有行,分兩步進行。

3

臨時表就是這樣的臨時表。一旦你關閉了連接,它們就會消失,至少在sqlite中是這樣。這通常比其他DMBS更復雜,儘管這通常是默認行爲。

因此,只要需要臨時表,就使用臨時表! (只是開玩笑')。性能會更好,因爲不存在I/O(這通常是數據庫性能問題的原因)。

另一個用例是當你想使用永久表中的內容而不改變上述表中的任何內容;然後您可以選擇臨時表中的永久表,並保持永久表完好無損。

相關問題