Mysql 使用带有多个WHERE子句的左连接优化查询

Mysql 使用带有多个WHERE子句的左连接优化查询,mysql,sql,optimization,Mysql,Sql,Optimization,是否有可能优化今天生成的以下查询: SELECT DISTINCT a.*,country,c.id id_employer,c.comp_name,c.show_comp_name,comp_type,b.id countryid,if(now() <a.hotjob_expire, true, false) is_hot FROM j5xap_jbjobs_job a LEFT JOIN j5xap_jbjobs_country b ON a.id_country = b.id

是否有可能优化今天生成的以下查询:

SELECT DISTINCT a.*,country,c.id 
id_employer,c.comp_name,c.show_comp_name,comp_type,b.id countryid,if(now() 
<a.hotjob_expire, true, false) is_hot 
FROM j5xap_jbjobs_job a 
LEFT JOIN j5xap_jbjobs_country b ON a.id_country = b.id 
LEFT JOIN j5xap_jbjobs_employer c ON a.employer_id = c.user_id 
LEFT JOIN j5xap_jbjobs_custom_field_value cv ON cv.jobid=a.id 
LEFT JOIN j5xap_jbjobs_comp_type d ON c.id_comp_type = d.id 
WHERE (a.job_title LIKE '%Web developer%' 
   OR a.state LIKE '%Web developer%' 
   OR a.city LIKE '%Web developer%' 
   OR b.country LIKE '%Web developer%' 
   OR c.comp_name LIKE '%Web developer%' 
   OR cv.value LIKE '%Web developer%' 
   OR cv.valuetext LIKE '%Web developer%' 
   OR a.short_desc LIKE '%Web developer%' 
   OR a.long_desc LIKE '%Web developer%') 
   OR (a.job_title LIKE '%kannur%' 
   OR a.state LIKE '%kannur%'
   OR a.city LIKE '%kannur%' 
   OR b.country LIKE '%kannur%' 
   OR c.comp_name LIKE '%kannur%' 
   OR cv.value LIKE '%kannur%' 
   OR cv.valuetext LIKE '%kannur%' 
   OR a.short_desc LIKE '%kannur%' 
   OR a.long_desc LIKE '%kannur%') 
   AND a.id_job_spec =441 AND a.id_job_spec 
   IN (SELECT id FROM j5xap_jbjobs_job_spec WHERE id_category='63') 
   AND 
   a.is_active='y' AND a.publish_date <= '2017-07-07 00:00:00' 
   AND
   expire_date  >= '2017-07-07 00:00:00' 
   AND 
   expire_date <> '0000-00-00 00:00:00' 
   ORDER BY is_hot DESC, a.is_featured DESC, a.publish_date DESC, a.id                      
   DESC LIMIT 0, 10;

id\u雇主、c.comp\u名称、c.show\u comp\u名称、comp\u类型、b.id国家id、if(现在()

我将从索引开始:
j5xap\u jbjobs\u job(id\u job\u spec,is\u active,publish\u date,is\u expire)
。对于所有其他表,您需要在连接键上建立索引


这应该允许使用索引进行过滤,这对性能来说应该是一个胜利。

查看一下
解释选择…
输出虽然“x%”可以使用索引,“%x”不能使用,所以这种查询的性能总是会受到限制。我怀疑你在
和a.id\u job\u spec=441和a.id\u jo中有错误b_spec IN(选择…
可能您想要