SQLite數據庫中存在多個表。可以從一個不存在的表格(從客戶端)請求數據。如果該表存在,則表中的所需數據將作爲行的陣列發送,如果表不存在,則返回空數組。哪個更好,[表格存在檢查+選擇]或[選擇+錯誤處理]?
有2種方法(我能想到的):
- 表存在檢查+選擇
- 選擇+錯誤處理
哪種方式會更好(或更快)?
SQLite數據庫中存在多個表。可以從一個不存在的表格(從客戶端)請求數據。如果該表存在,則表中的所需數據將作爲行的陣列發送,如果表不存在,則返回空數組。哪個更好,[表格存在檢查+選擇]或[選擇+錯誤處理]?
有2種方法(我能想到的):
哪種方式會更好(或更快)?
它的種類取決於您的默認情況。如果該表在大多數情況下都存在,則使用第二個選項。正如@CristianAbelleira在評論中指出的那樣,這也會減少數據庫的負載,因爲它只是少一筆交易。
如果另一方面您希望表大部分時間不存在,請在實際選擇之前執行某種檢查。這可以通過你的第一個選項來完成,但我也喜歡Daves的想法。
表格將存在於這種情況下。 – wolfram77
我會運行第三個想法。
當您連接到dB獲取表名稱的快速列表(作爲一個很好的雙重檢查,連接工作正常)將它們存儲在列表中某處,然後當用戶創建他們的查詢給他們一個下降下拉列表中包含這些表名(或者以某種方式再次檢查輸入的名稱在該列表中)。
這裏唯一的缺點是用戶在會話期間創建了一個新表。
否則,如果用戶正在做一個自由格式的SQL語句,就讓服務器拋出我們的錯誤,然後用合理的錯誤消息處理它。
dB引擎可能比您的'檢查表存在'代碼更高效。除非你正在生成一個請求建築圖形,在這種情況下,上述場景可能效果最好(假設你沒有數百個表)。
戴夫。
最好的解決方案應該是你有一個適當的模式,其中所有表名都是靜態的,並且在正常操作期間不會創建,更改或刪除表,所以不應該在不存在的表上進行選擇。 – Philipp
在性能方面,2º解決方案可能會更好,因爲您只選擇一次。 –
@Philipp很快,但是這個'db'中的表格的形式是'date_DD_MM_YYYY',並且不斷地在'INSERT'上創建並且在'DELETE'上。 – wolfram77