我的mysql数据库中有100K个数据,我想在其中搜索一个查询。我删除了停止词,并将其拆分为一个关键字数组,并存储在变量ie $key[0],$key[1],$key[2]
中。我使用以下查询
SELECT *
FROM `table`
WHERE (`column` LIKE '%$key1%'
OR `column` LIKE '%$key2%'
OR `column` LIKE '%$key3%');
还有其他更快的方法可以做到这一点。
像这样加快查询速度的唯一方法是使用全文搜索。LIKE '%string%'
不能用普通索引进行优化,因为它们使用依赖于匹配要搜索的字符串前缀的B树。由于您的模式以通配符开头,因此索引没有帮助。
另一个解决方案是规范化数据库。不要把所有关键字都放在一列中,而是把它们放在另一个表中,该表有一个外键,每个FK+关键字有一行。然后您可以使用联接来匹配关键字。
此外,您在列名周围使用了错误类型的引号。它们应该是反引号,而不是单引号。
您可以执行类似的操作
SELECT *
FROM table
WHERE colomn REGEXP '$key1|$key2|$key3'
等等,所以与其将数组创建为逗号分隔的关键字列表,不如将其创建为管道分隔的列表,然后将字符串也推送到正则表达式中,这只是
- 不要
SELECT *
,只选择你需要的 - 如果要进行完整的文本搜索,请丢失
%
并添加索引 - 您拼错了
column