小编flo*_*ank的帖子

为什么 LEFT JOIN ON(...AND...) 这个查询会变慢?

我不明白为什么这个查询很慢。它运行 3-4 秒。当我删除表上的联接时,wa_file_storage整个查询运行时间不到 0.02 秒。explain没有表现出任何特别的东西,至少对我来说没有。我很可能缺乏知识,无法从解释中显示的数据得出正确的结论。我猜这与那里使用的两个索引和密钥长度有关?

我发现这两个条件的结合导致速度变慢:

ON (
    `CompanyLogo`.`model` = 'CompanyLogo' 
    AND 
    `Companies`.`id` =     (`CompanyLogo`.`foreign_key`)
)
Run Code Online (Sandbox Code Playgroud)

当我从中删除 CompanyLogo 或 Companies 条件时,查询再次快速运行。

为什么这个连接 ON 会导致查询性能变得如此糟糕,我该如何修复这种情况?

输出explain

在此输入图像描述

explain仅包含字段的输出foreign_key(运行23 秒!):

在此输入图像描述

explain仅包含字段的输出model(运行 0.015 秒):

在此输入图像描述

查询:

SELECT `Jobs`.`id` AS `Jobs__id`,
       `Jobs`.`company_id` AS `Jobs__company_id`,
       `Jobs`.`job_category_id` AS `Jobs__job_category_id`,
       `Jobs`.`branch_id` AS `Jobs__branch_id`,
       `Jobs`.`title` AS `Jobs__title`,
       `Jobs`.`reference_number` AS `Jobs__reference_number`,
       `Jobs`.`location_same_as_office_address` AS `Jobs__location_same_as_office_address`,
       `Jobs`.`country_id` AS `Jobs__country_id`,
       `Jobs`.`city` AS `Jobs__city`,
       `Jobs`.`type_id` AS `Jobs__type_id`,
       `Jobs`.`description` AS `Jobs__description`,
       `Jobs`.`contact_first_name` …
Run Code Online (Sandbox Code Playgroud)

mysql performance query-performance

5
推荐指数
1
解决办法
3861
查看次数

标签 统计

mysql ×1

performance ×1

query-performance ×1