2013-06-23 51 views
0

我們在SQLite3的數據庫是這樣的一個表:不存在於SQLite SELECT語句中的BLOB可能會影響性能?

Create Table Images (ID PRIMARY KEY, Height INTEGER, Width INTEGER, FileName TEXT, Thumb BLOB) 

大拇指相當小(@ 20KB)和表基數是某處大約100,000-200,000行。

如果我們在表中有BLOB,並且如果我們將BLOB移動到另一個表中,將有一個外鍵爲Images.ID,那麼同一個查詢(SELECT ID, FILENAME FROM IMAGES)之間會存在顯着的速度差異?請注意該字段不存在於查詢中。

即使所述字段不存在於查詢中,表中簡單存在BLOB字段(或不)會顯着影響性能,

+0

您可以簡單地嘗試... –

回答

2

blob數據與表中每條記錄中的其他列一起存儲。 因此,如果您的查詢需要訪問多個記錄,則必須從磁盤讀取所有數據,即使只有某些列實際返回到應用程序。

對於默認的4 KB頁面大小,使用溢出頁面存儲大於4061字節的記錄,並且這些頁面僅在需要時加載。 因此,如果既沒有使用blob列,也沒有使用它之後的任何列,則不會訪問溢出頁面。 但是,記錄的at least the first 489 bytes總是存儲在表的B-tree頁面中,所以如果記錄中的其他值不需要太多空間,表格頁面中的大部分空間仍然被blob數據佔用。

+0

即使BLOB是最後一個字段? –