2011-05-05 52 views
2

我打算爲SQLite生成查詢,這將涉及12個表上的許多連接,這些連接將超過SQLite中的64個表連接限制。 (約250個表連接或可能更多)這將最終在Android上運行。這背後的目的是在結果集中有X個用戶定義字段,具體取決於正在生成的報告。在SQlite中執行超過64個表連接的最快方法是什麼?

可惜我不是一個DBA,我不知道的最佳方式來實現這一目標。

到目前爲止,我認爲有三種選擇:

  • 2使用臨時表來玩弄的結果,同時加入了最大數量可能設置。 (SQLServer的在我以前的解決方案,比較慢)
  • 產生結果集數列和一鍵加入並把它們存儲在n臨時表。 (其中n小於64)然後加入其公共密鑰上的所有臨時表。
  • 創建一個臨時表,並一次填充一個插入或更新。
  • 不要做大連接,反而執行多個選擇並填充某種數據容器。

有別的我應該考慮?

+6

你真的需要那麼多表嗎?每個人有多少列?在這種情況下,我會說任何方法都不會在手機上快速完成,如果可能的話,在服務器上進行所有連接,並將最終結果作爲XML或JSON文件發送。 – 2011-05-05 16:01:18

+0

我加入的表格很薄,有2-3列,但我多次加入相同的表格。我很可能會選擇通過Web服務進行處理,但是我希望用戶可以選擇在沒有數據連接的情況下在本地執行此操作。 – 2011-05-05 16:50:09

+3

@Biff MaGriff:「我可能錯過了另一個選擇嗎?「 - 我虛心地暗示,SQLite可能不適合你正在做的任何事情。 – CommonsWare 2011-05-05 17:01:20

回答

3

每邁克的迴應你的評論,「生成報告的查詢需要加入並重新加入很多很多次」。

通常,在處理報告時,您需要將查詢拆分爲一口大小的塊,並將中間結果存儲在臨時表中(如果適用)。

此外,你的問題聽起來像你有一個實體/屬性/價值存儲,並試圖擺動整個事情。如果是這樣,你可能想重新使用這種設計反模式,因爲它可能是你的問題的根源。

3

,當你想加入許多表我不認爲你可以得到任何關係型數據庫平臺「快」 - 任何一種內置的優化是要放棄的鬼。當我在查詢中看到多達十個表格時,我可能會審查我的設計。

我覺得你的架構設計需要被重新審視。架構中的250多個表(在手機上!)對我來說沒有意義 - 我在具有200 + GB數據的單個數據庫中運行多個企業應用程序,而且仍然只有84個表。我從來沒有加入他們所有的人。你所有的桌子都有不同的列嗎?真的不一樣?你能從sqlite_master發佈幾個條目嗎?

2

由於您的應用在Android設備上運行,我猜想它會與服務器上某個企業級數據庫同步。真正的解決方案是在設備數據庫上生成服務器數據的非規範化表示,因此可以更容易地訪問它。

相關問題