即使閱讀了很多關於SQLite的全文索引並且出現了一個問題,我沒有在任何地方看到答案:SQLite全文虛擬表通常可用?
我已經有了一個表,我想用全文索引進行搜索。我只是創建一個額外的虛擬表USING FTS3
或USING FTS4
然後INSERT
我的數據到它。
那麼這是否總共使用雙存儲?我是否可以像普通表一樣使用這樣的虛擬表格,從而避免兩次存儲數據?
(我在Android上使用SQLite的工作,但這個問題可以適用於使用任何的SQLite兼容的平臺。)
即使閱讀了很多關於SQLite的全文索引並且出現了一個問題,我沒有在任何地方看到答案:SQLite全文虛擬表通常可用?
我已經有了一個表,我想用全文索引進行搜索。我只是創建一個額外的虛擬表USING FTS3
或USING FTS4
然後INSERT
我的數據到它。
那麼這是否總共使用雙存儲?我是否可以像普通表一樣使用這樣的虛擬表格,從而避免兩次存儲數據?
(我在Android上使用SQLite的工作,但這個問題可以適用於使用任何的SQLite兼容的平臺。)
儘管你並發現了一些細節,我會盡量提供詳細的解答:
1.這是否然後使用雙存儲總?
是的。而且它可能會使用更多的空間。例如,衆所周知安然電子郵件數據集和FTS3example,只是感覺不一樣:
的FTS3表會消耗2006年左右MB磁盤上的比例僅爲 1453 MB爲普通表
FTS3表只需31分鐘就可以完成31 分鐘,而普通表需要25分鐘
這使得情況有點不愉快,但仍全文檢索值得的。
2.我可以像普通表一樣使用這樣的虛擬表嗎?
簡短的回答不,你不能。虛擬表只是一種查看有幾個限制。你已經注意到了幾個。
通常說你不應該使用任何似乎是不自然的功能查看。只需要最低限度地讓您的應用程序充分利用全文搜索的力量。所以稍後會有更新版本的模塊出現。
有這個解決方法沒有神奇的,它僅僅是性能,所需的磁盤空間和功能性之間進行權衡。
最終結論
我會強烈建議使用FTS4,因爲它是快,是額外的存儲空間,唯一的缺點。
無論如何,你必須仔細設計虛擬表考慮到這樣的解決方案的補充和專業性很強。換句話說,不要試圖用虛擬表格替換你的初始表格。謹慎使用這兩者。
更新 我會建議看看下面的文章:iOS full-text search with Core Data and SQLite。一些有趣的時刻:
- 虛表是在至極的核心數據內容駐留在同一SQLite數據庫創建的。 爲了使該表保持儘可能輕的效果 只插入了與搜索查詢相關的對象屬性。
- SQLite實現提供了一些核心數據不包含的內容:全文搜索。 除此之外,它比同等核心數據查詢執行速度提高了近10%,並且至少有效地提高了660%(內存)。
我剛剛發現了main differences of virtual tables,它似乎取決於你使用一個單一的表是否足以滿足您。
一個不能創建一個虛擬表的觸發器。
無法在虛擬表上創建附加索引。 (虛擬表可以有索引,但必須建立在虛表 實現。指數不能使用CREATE INDEX 報表中單獨添加。)
- 一個無法運行ALTER TABLE ... ADD對虛擬表列命令。
所以,如果你需要在表上的另一個索引,你需要使用兩個表。
@RenatGilmanov我認爲,因爲這是更多的答案? –