2012-07-13 242 views
3

即使在讀取SQLite limits後,我仍無法找到SQLite數據庫文件可容納的最大表數。所以,我想知道如果SQLite數據庫文件支持的最大表數

  1. 有一個SQLite數據庫可以容納的最大數量的表?
  2. 在SQLite數據庫文件中有數千個小表是一個問題?
  3. SQLite數據庫文件中的許多表可以影響查詢的性能?

回答

1

我認爲表的數目僅受數據庫大小的限制。單個SQLite數據庫中最多可以有2,147,483,646個頁面。所以我猜這也將是單個SQLite數據庫中表的最大數量。

這是基於該數據庫的頁面僅用於表,這可能不是一個非常有用的假設前提。

5

的SQLite中限制清單記錄at this page。每個數據庫沒有最大數量的表,所以SQLite可能沒有實現任何限制。每個JOIN有64個表的限制。

表中的結構是否相同?如果是這樣,通常認爲將它們存儲在具有標識列的單個表格中是更好的做法。

+0

我同意你,但我有一個問題。假設我有一張表和20個不同的記錄以及標識列。每個識別列有20K行,如果我必須從20個行中移除7個。我需要多少處理,考慮電池的使用情況,以及如果我有20個不同的相同表,並且我只是放下桌子。請讓我知道哪一個更好? – 2014-08-13 11:24:00

+1

即使您必須考慮處理刪除問題,單表方法也是最好的。你不*不想擔心在數據庫中維護多個相同的表。也就是說,即使進行高效的刪除,從刪除表中的數千行所涉及的工作量也會多於刪除單個表。 – 2014-08-13 12:28:46

+0

Larry我理解單表方法是最好的,但是你的意思是什麼?「帽子說,即使有效刪除,從表中刪除數千行所涉及的工作比刪除單個表所涉及的工作量還要多」你在這裏支持多表。請澄清。謝謝你的時間 :-) – 2014-08-14 01:42:06

1

回答您的問題2和3,雖然具有相似結構的多個表違背了數據庫規範化的原則,還有爲什麼它會優於單個表或虛擬表中的許多現實的原因 - 最大的當然是比在SQLite中,刪除表比列更容易。如果採取簡單的方法並且不執行「正確的」規範化關係表,它也佔用比單個表的每行中的「tableX」更少的空間。

在性能方面,你將不會看到任何問題,用幾十萬的表相比,有幾十萬項中的「表」列一個表,並且該列索引。事實上,單個規範化表上的索引可能遠遠大於SQLite使用的表索引機制,效率也較低。在說了所有這些之後,我不能說有一個健康的良知結束了這篇文章,並沒有說像exec()被用來分配帶有變量名稱的變量,這在編程中是一個常見的初學者錯誤,使得應該在多個表中單個規範化表(虛擬或其他)是數據庫體系結構中常見的初學者錯誤。在這兩個領域中,有些情況下使用exec或許多表格是正確的選項。例如,如果您的數據非常相似,但您確信您不會對數據進行任何連接,那麼很多表格都可以。只要確保你確實看到數據完全不相關,儘管它們具有相似的結構。