如何让查询更快

时间:2014-09-23 15:34:03

标签: mysql

我有一个复杂的查询,它根据搜索关键字从数据库中提取数据。我已经编写了两个查询来通过连接两个表来获取基于关键字的数据。每个表包含超过5百万条记录。但问题是,此查询需要5-7秒才能运行,因此页面需要更多时间才能完成。查询是:

SELECT DISTINCT( `general_info`.`company_name` ), 
               general_info.* 
FROM   general_info 
       INNER JOIN `financial_info` 
               ON `financial_info`.`reg_code` = `general_info`.`reg_code` 
WHERE  ( `financial_info`.`type_of_activity` LIKE '%siveco%' 
          OR `general_info`.`company_name` LIKE '%siveco%' 
          OR `general_info`.`reg_code` LIKE '%siveco%' ) 

1 个答案:

答案 0 :(得分:1)

不同的括号并没有什么区别。 distinct不是函数。所以你的查询相当于:

SELECT gi.* 
FROM   general_info gi INNER JOIN
      `financial_info` gi
       ON fi.`reg_code` = gi.`reg_code` 
WHERE fi.`type_of_activity` LIKE '%siveco%' OR
      gi.`company_name` LIKE '%siveco%' OR
      gi.`reg_code` LIKE '%siveco%';

对于join,您应该在general_info(reg_code)financial_info(reg_code)上设置索引。您可能已经拥有这些索引。

真正的问题可能是where条款。由于您在模式的开头使用通配符,因此无法使用常规索引对其进行优化。您可以使用全文搜索以及matches子句来执行您想要的操作。这种索引的文档是here。如果您要查找各种名称的完整单词,这将特别有效。