2015-05-28 38 views
0

SQLite數據庫中存在多個表。可以從一個不存在的表格(從客戶端)請求數據。如果該表存在,則表中的所需數據將作爲行的陣列發送,如果表不存在,則返回空數組哪個更好,[表格存在檢查+選擇]或[選擇+錯誤處理]?

有2種方法(我能想到的):

  • 表存在檢查+選擇
  • 選擇+錯誤處理

哪種方式會更好(或更快)?

+1

最好的解決方案應該是你有一個適當的模式,其中所有表名都是靜態的,並且在正常操作期間不會創建,更改或刪除表,所以不應該在不存在的表上進行選擇。 – Philipp

+1

在性能方面,2º解決方案可能會更好,因爲您只選擇一次。 –

+0

@Philipp很快,但是這個'db'中的表格的形式是'date_DD_MM_YYYY',並且不斷地在'INSERT'上創建並且在'DELETE'上。 – wolfram77

回答

3

它的種類取決於您的默認情況。如果該表在大多數情況下都存在,則使用第二個選項。正如@CristianAbelleira在評論中指出的那樣,這也會減少數據庫的負載,因爲它只是少一筆交易。

如果另一方面您希望表大部分時間不存在,請在實際選擇之前執行某種檢查。這可以通過你的第一個選項來完成,但我也喜歡Daves的想法。

+0

表格將存在於這種情況下。 – wolfram77

2

我會運行第三個想法。

當您連接到dB獲取表名稱的快速列表(作爲一個很好的雙重檢查,連接工作正常)將它們存儲在列表中某處,然後當用戶創建他們的查詢給他們一個下降下拉列表中包含這些表名(或者以某種方式再次檢查輸入的名稱在該列表中)。

這裏唯一的缺點是用戶在會話期間創建了一個新表。

否則,如果用戶正在做一個自由格式的SQL語句,就讓服務器拋出我們的錯誤,然後用合理的錯誤消息處理它。

dB引擎可能比您的'檢查表存在'代碼更高效。除非你正在生成一個請求建築圖形,在這種情況下,上述場景可能效果最好(假設你沒有數百個表)。

戴夫。

+0

即使在運行時緩慢創建表,也可以一次刪除大量表。然而,表名緩存的想法很好。 – wolfram77

+0

@ wolfram77從閱讀你的其他評論之一,你的問題將保持最新的緩存,如果他們快速創建插入。如果是這種情況,臨時表可能是一個很好的選擇(sqlite是否支持它們?),因爲它們在連接關閉時會被丟棄。 – DaveM

+0

插件應該最大爲10/s。以前沒有聽說過臨時表,但是如果連接丟失,數據不應該丟失。目前使用選擇與錯誤處理,如Cristian&Andre所建議的。在大多數情況下, – wolfram77

相關問題