LEFT JOIN运行非常缓慢,但是嵌套选择没有

时间:2019-05-15 18:02:52

标签: mysql select nested left-join

我听说,JOINS效率更高,但是当我尝试实现它时,SELECT就会卡在执行中。

我正在使用MySQL,并且我有两个表,其中有一个带有for循环的100,000条记录。

CREATE TABLE `offers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY(`id`)
);

CREATE TABLE `files` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `path` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `object_id` int(11) NOT NULL,
  PRIMARY KEY(`id`)
);

然后执行以下查询需要0.3秒:

SELECT o.id, (SELECT f.path FROM `files` AS f WHERE f.object_id = o.id LIMIT 1) as path FROM `offers` AS o;

但是,此查询在文件表几乎为空时以完全相同的方式起作用。但是当我填写文件表时,执行从未完成。

SELECT o.id, f.path FROM `offers` o LEFT OUTER JOIN `files` f ON f.object_id = o.id

我做错了什么?

1 个答案:

答案 0 :(得分:0)

用于左联接性能

SELECT o.id, f.path 
FROM `offers` o 
LEFT OUTER JOIN `files` f ON f.object_id = o.id

确保您拥有复合索引

  on table files column(object_id, path)