2012-09-05 60 views
0

我正在使用sqlite3作爲數據庫。數據庫有一個使用「名稱」字段作爲索引的表,它是一個UTF-8字符串。爲了進行不區分大小寫的比較,我添加了一個名爲「name_upper」的新列,它只是「name」字段的UTF-8大寫版本,並將其用作索引。sqlite3表大小是否會影響性能?

事實證明,「名稱」字段是迄今爲止表中最大的字段,所以通過定義「name_upper」字段,我基本上使表的大小加倍。與數據庫文件所在的磁盤大小相比,數據庫的大小仍然很小,但與內存大小相比,它可能會變大。

我的問題是,表格的大小是否會影響性能?我擔心需要更多內存來緩存表格。

另一種解決方案是定義一個執行不區分大小寫的UTF-8比較的新歸類函數(我知道ICU提供了一個實現)。我不確定那種情況下對性能的影響是什麼,因爲每次比較都需要做從小寫到大寫的轉換。

+1

'name_upper'只是多餘的!爲什麼不直接進行不區分大小寫的比較而不是添加新列?關於SQLite性能,這裏是基準報告(它們是古老的,但你有一個想法)http://www.sqlite.org/speed.html。如果'name'是你的表唯一索引,你可能想考慮爲索引設置一些'int'列。 – omggs

回答

0

如果您的查詢實際上讀取了所有的表,則表格大小會影響性能;如果可以通過單獨檢查索引來應對搜索,則性能保持不變。

通常,I/O主導運行時。 即使您的數據適合緩存,整理函數的運行時間也不可能引人注目,因爲大多數使用索引的查找都使用二分搜索,即只比較幾條記錄。

相關問題