SQLite - 如何返回包含包含一个或多个字符串的文本字段的行?

Sam*_*Sam 5 sqlite performance select sql-like

我需要查询SQLite数据库中的表,以返回表中与给定单词集匹配的所有行.

更确切地说:我有一个包含约80,000条记录的数据库.其中一个字段是文本字段,每条记录大约100-200个字.我想要做的是获取200个单词关键字{"apple","orange","pear",...}的列表,并检索表中包含至少一个的所有记录的集合描述列中的关键字术语.

显而易见的方法是使用以下方法:

SELECT stuff FROM table 
WHERE (description LIKE '% apple %') or (description LIKE '% orange %') or ... 
Run Code Online (Sandbox Code Playgroud)

如果我有200个术语,我最终会看到一个大而讨厌的SQL语句,在我看来是笨拙的,糟糕的做法,并且不奇怪需要花费很长时间来处理 - 每1000条记录超过一秒.

这个答案更好的SQLite Select语句的性能似乎接近我所需要的,因此我创建了一个索引,但根据http://www.sqlite.org/optoverview.html sqlite如果LIKE不使用任何优化运算符与开头%通配符一起使用.

不是SQL专家,我假设我这样做是愚蠢的.我想知道具有更多经验的人是否可以建议一种更明智,也许更有效的方法来做到这一点?

或者,我可以使用更好的方法解决问题吗?

mik*_*kel 4

使用SQLite 全文搜索比 LIKE '%...%' 查询更快。我认为没有任何数据库可以使用索引来进行以 % 开头的查询,就好像数据库不知道查询以什么开头一样,就无法使用索引来查找它。

另一种方法是将关键字放在单独的表中,并创建一个中间表,其中包含有关主表中哪一行具有哪些关键字的信息。如果您以这种方式对所有相关列建立索引,则可以非常快速地对其进行查询。