【发布时间】:2014-07-22 12:22:53
【问题描述】:
我有一个使用此架构的 sqlite3 数据库:
CREATE TABLE [dict] (
[Entry] [CHAR(209)],
[Definition] [CHAR(924975)]);
CREATE INDEX [i_dict_entry] ON [dict] ([Entry]);
它是一种字典,有 260000 条记录,大小接近 1GB;我为Entry 列创建了索引以提高性能;
一行输入列的示例如下:
|love|lovingly|loves|loved|loving|
所有用|分隔的词都指同一个定义;(我把它们都放在一个字符串中,用|分隔以防止Definition列中的数据重复)
这是我用来检索结果的命令:
SELECT * FROM dict WHERE Entry like '%|loves|%'
执行时间:~1.7s
如果我使用= 运算符而不是LIKE 运算符,则执行几乎是瞬时的;
SELECT * FROM dict WHERE Entry='|love|lovingly|loves|loved|loving|'
但是这样我就无法搜索诸如:love,loves...(我的意思是分开的)之类的词
我的问题:
虽然我已经为Entry 列创建了索引,但是当我们使用LIKE 运算符和% 时,索引真的有效吗?
如果我为复合 Entry 列的每个部分创建不同的行(一个代表爱另一个代表爱...然后所有将具有相同的定义)然后使用 = 运算符,这个想法怎么样?如是;反正有数据的引用吗?我的意思是不要为每个条目重复相同的Definition,而是创建一个并且所有其他条目都指向它;有可能吗?
提前感谢任何提示和建议;
【问题讨论】:
标签: select sqlite indexing sql-like