对于这个MYSQL搜索查询,还有其他更快的执行方法吗?

时间:2013-07-24 12:53:46

标签: php mysql

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

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

是其他任何更快速的方法。

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

你可以做这样的事情

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

等等,所以不要创建你的数组作为逗号分隔的关键词列表,而是将它作为管道分隔列表,然后将字符串推入你的正则表达式,这只是一个例子

答案 2 :(得分:0)

  1. 请勿SELECT *,只选择您需要的内容。
  2. 如果您要进行全文搜索,请丢失%并添加索引
  3. 你拼错了column