0

我的 mysql 数据库中有 100K 数据,我想在其中搜索查询。我删除了停用词并将其拆分为一个关键字数组并存储在一个变量中,即$key[0],$key[1],$key[2]。我正在使用以下查询

SELECT * 
FROM   `table` 
WHERE (`column` LIKE '%$key1%' 
     OR `column` LIKE '%$key2%' 
     OR `column` LIKE '%$key3%');

是任何其他更快的方法来做同样的事情。

4

3 回答 3

1

加快此类查询的唯一方法是使用全文搜索。LIKE '%string%'无法使用普通索引进行优化,因为它们使用依赖于匹配正在搜索的字符串前缀的 B 树。由于您的模式以通配符开头,因此索引无济于事。

另一种解决方案是规范化您的数据库。不要将关键字全部放在一列中,将它们放在另一个表中,此表有一个外键,每个 FK+关键字对应一行。然后,您可以使用连接来匹配关键字。

此外,您在列名周围使用了错误类型的引号。它们应该是反引号,而不是单引号。

于 2013-07-24T12:57:51.763 回答
0

你可以做这样的事情

SELECT * 
FROM  table 
WHERE colomn REGEXP '$key1|$key2|$key3' 

等等等等,而不是将您的数组创建为逗号分隔的关键字列表,而是将其作为管道分隔的列表,然后将字符串也推送到您的正则表达式中,这只是一个示例

于 2013-07-24T12:57:41.760 回答
0
  1. 不要SELECT *,只选择你需要的。
  2. 如果要进行全文搜索,请丢失%并添加索引
  3. 你拼错了column
于 2013-07-24T12:58:22.420 回答