我有一个复杂的查询,它根据搜索关键字从数据库中获取数据。我已经写了两个查询,通过连接两个表来获取基于关键字的数据。每个表包含超过500万条记录。但问题是,这个查询需要5-7秒来运行,所以页面需要更多的时间才能到达laod。这些查询包括:
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%' ) 发布于 2014-09-23 23:39:23
distinct前后的括号没有区别。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。如果您要在各种名称中查找完整的单词,这将特别有效。
https://stackoverflow.com/questions/25999132
复制相似问题