Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Select sqlite3数据库有助于提高性能和设计_Select_Sqlite_Indexing_Sql Like - Fatal编程技术网

Select 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| 所有用|分隔的

我有一个具有以下模式的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|
所有用
|
分隔的单词都指同一定义;(我把它们放在一个字符串中,用
|
分隔,以防止
定义
列中的数据重复)

这是我用来检索结果的命令:

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