Select sqlite3数据库有助于提高性能和设计
我有一个具有以下模式的sqlite3数据库:Select sqlite3数据库有助于提高性能和设计,select,sqlite,indexing,sql-like,Select,Sqlite,Indexing,Sql Like,我有一个具有以下模式的sqlite3数据库: CREATE TABLE [dict] ( [Entry] [CHAR(209)], [Definition] [CHAR(924975)]); CREATE INDEX [i_dict_entry] ON [dict] ([Entry]); 它是一种拥有26万条记录和近1GB大小的字典;我为条目列创建了一个索引,以提高性能 行的输入列示例如下所示: |love|lovingly|loves|loved|loving| 所有用|分隔的
CREATE TABLE [dict] (
[Entry] [CHAR(209)],
[Definition] [CHAR(924975)]);
CREATE INDEX [i_dict_entry] ON [dict] ([Entry]);
它是一种拥有26万条记录和近1GB大小的字典;我为条目
列创建了一个索引,以提高性能
行的输入列示例如下所示:
|love|lovingly|loves|loved|loving|
所有用|
分隔的单词都指同一定义;(我把它们放在一个字符串中,用|
分隔,以防止定义
列中的数据重复)
这是我用来检索结果的命令:
SELECT * FROM dict WHERE Entry like '%|loves|%'
执行时间:~1.7秒
如果我使用=
操作符而不是像操作符那样使用,执行几乎是瞬时的
SELECT * FROM dict WHERE Entry='|love|lovingly|loves|loved|loving|'
但这样我就找不到像这样的词:爱,爱…(我的意思是分开的)
我的问题是:
虽然我已经为条目
列创建了一个索引,但是当我们使用LIKE
操作符时,索引真的有效吗
我为复合条目
列的每个部分创建不同的行(一个代表爱,另一个代表爱……那么所有的行都将具有相同的定义),然后使用=
操作符,这个想法怎么样?若有,;是否存在引用数据的方法?我的意思是,不要对每个条目重复相同的定义
,而是创建一个条目,所有其他条目都指向它;可能吗
提前感谢您的任何提示和建议 每个条目在数据库中都应该有一个单独的行:
CREATE TABLE Definitions (
DefinitionID INTEGER PRIMARY KEY,
Definition TEXT
);
CREATE TABLE Entries (
EntryID INTEGER PRIMARY KEY,
DefinitionID INTEGER REFERENCES Definitions(DefinitionID),
Entry TEXT
);
CREATE INDEX i_entry ON Entries(Entry);
然后,可以通过连接两个表来查询定义:
SELECT Definition
FROM Entries
JOIN Definitions USING (DefinitionID)
WHERE Entry = 'loves'
另请参见。令人印象深刻!在编码迁移到新模式后,以下是查询的执行时间:0.0009999997635s