[英]how do I make this query run faster?
我在 PHP 网站上运行了这个 SQL 查询。 这是一个旧站点,查询是几年前由以前的开发人员构建的。 但是现在随着站点数据增加到 230mb 左右,这个查询的执行速度变得很慢。 大约需要 15-20 秒。 有什么办法可以让这个运行得更快吗?
SELECT DISTINCT
NULL AS bannerID,
C1.url AS url,
LOWER(C1.Organization) AS company_name,
CONCAT(
'https://mywebsite.co.uk/logos/',
C1.userlogo
) AS logo_url
FROM
Company AS C1
INNER JOIN Vacancy AS V1 ON LOWER(V1.company_name) = LOWER(C1.Organization)
WHERE
V1.LiveDate <= CURDATE()
AND url = ''
AND V1.ClosingDate >= CURDATE()
AND C1.flag_show_logo = 1
正如评论的那样,由于使用了lower
功能,您的查询无法进行查询。
另外我怀疑你可以通过使用exists
而不是加入你的表来删除distinct
的
select null as bannerID,
C1.url as url,
Lower(C1.Organization) as company_name,
Concat('https://mywebsite.co.uk/logos/', C1.userlogo) as logo_url
from Company c
where c.flag_show_logo = 1
and c.url = ''
and exists (
select * from Vacancy v
where v.LiveDate <= CURDATE()
and v.ClosingDate >= CURDATE()
and v.company_name = c.Organization
)
通过更改为避免 sargable 问题
ON V1.company_name = C1.Organization
并将这两列声明为相同的排序规则,即以“_ci”结尾的排序规则。
并有这些复合索引:
C1: INDEX(flag_show_logo, url, Organization, userlogo)
V1: INDEX(company_name, LiveDate, ClosingDate)
(这些索引也应该有助于 Stu 的回答。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.