簡體   English   中英

在SQlite中執行超過64個表連接的最快方法是什么?

[英]What is the fastest method for performing more than 64 table joins in SQlite?

我計划為SQLite生成查詢,這將涉及12個表上的許多連接,這些連接將超過SQLite中的64個表連接限制。 (~250表連接或可能更多)這將最終在android上運行。 這背后的目的是在結果集中具有X量的用戶定義字段,具體取決於正在生成的報告。

不幸的是,我不是DBA,我不知道實現這一目標的最佳方法。

到目前為止,我認為選項是:

  • 在加入最大可能數量時,使用2個臨時表來處理結果集。 (我以前的SQLServer解決方案,相當慢)
  • 生成幾列的結果集和一個用於連接的鍵,並將它們存儲在n臨時表中。 (其中n小於64)然后將所有臨時表加入其公共密鑰。
  • 創建一個臨時表並將其填充一次或一次更新。
  • 不要做大連接,改為執行許多選擇並填充某種數據容器。

還有什么我應該考慮的嗎?

當你試圖加入那么多表時,我不認為你可以在任何關系數據庫平台上“快速” - 任何一種內置優化都會放棄重影。 當我在查詢中看到多達十個表時,我可能會查看我的設計。

我認為您的架構設計需要重新審視。 模式中的250多個表(在電話上!)對我沒有意義 - 我在一個具有200 + GB數據的數據庫中運行多個企業應用程序,但仍然只有84個表。 而且我從未加入所有這些人。 你的所有表都有不同的列嗎? 真的不一樣嗎? 你能從sqlite_master一些條目嗎?

根據您對Mike的回復的評論,“生成報告的查詢需要多次加入並重新加入”。

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM