带有派生查询的MySQL查询性能

时间:2017-06-06 12:47:13

标签: mysql performance

我正在查看一些性能查询并对查询进行了更改,该查询基于以下示例。这个变化将一个6分钟的查询变成了一个在几秒钟内完成的查询,我想知道为什么?这种情况如何改变到这种程度?

在示例中,请假设BOOK表包含库中所有书籍的一般详细信息,FORMATS表包含详细信息,例如HARDBACK,PAPERBACK和eBOOK(允许添加新格式)密钥(称为FORMATID)链接两个表。

查询在6分钟内执行

select b.bookid, f.formatname
from book b
inner join formats f on f.formatid = b.formatid

select b.bookid, f.formatname
from book b
left join formats f on f.formatid = b.formatid

查询在12秒内执行

select b.bookid, (select f.formatname from formats f where f.formatid = b.formatid)
from book b
where b.formatid is not null

select b.bookid, (select f.formatname from formats f where f.formatid = b.formatid)
from book b

在上面,每对的第一个查询实现了INNER JOIN结果,第二个查询实现了LEFT JOIN。我的数据库的结果差异是295166和295376行;关系差异几乎保持不变。

[已添加]确认;我已经通过创建这里提到的两个测试表来测试了这个(具有相同的结果),用大约100万行填充BOOKS表并且不应用任何索引或其他优化。

0 个答案:

没有答案