我有一张约90 000行的表格。在磁盘大小(此表的表)上~60 Mb。
要搜索我正在使用模式LIKE '%xxx%'
。
SELECT *
FROM table
WHERE column LIKE '%value%'
LIMIT 20
列未编入索引,因为当LIKE
模式以通配符开头时,SQLite不使用索引。
第一次执行它需要约30秒。在第二次它最多需要100毫秒。我知道冷和热缓存,但我简直无法相信在内存中读取表需要花费很多时间。 Visual Studio分析器显示了不断增长的内存使用量。好。也许搜索太慢了?但不是。简单SELECT * FROM table
向我们显示相同的~30秒读取60 Mb。
我尝试使用PRAGMA cache_size = -100000;
增加缓存,使用SQLITE_THREADSAFE=0
构建sqlite dll。它没有帮助。
我在我的C#应用程序中使用System.Data.Sqlite
,但在简单sqlite3.dll
上进行了测试。相同。数据库使用的是UTF-16le编码。