繁体   English   中英

如何使此查询运行得更快?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM