我听说,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
我做错了什么?
答案 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)