我有一个复杂的查询,它根据搜索关键字从数据库中提取数据。我已经编写了两个查询来通过连接两个表来获取基于关键字的数据。每个表包含超过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%' )
答案 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。如果您要查找各种名称的完整单词,这将特别有效。