2

我有一个关于 JOINS 的问题。Sql JOIN 会降低查询的性能吗?我有很多 JOIN 查询。我可以说糟糕的表现来自这些 JOINS 吗?如果是,我应该怎么做而不是在查询中加入?

这是我的一部分查询

......
FROM (((((tb_Pinnummern INNER JOIN tb_Fahrzeug ON tb_Pinnummern.SG = tb_Fahrzeug.Motor_SG) INNER JOIN tb_bauteile ON tb_Pinnummern.Bauteil = tb_bauteile.ID) LEFT JOIN Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Plus ON Fehlercodes_akt_Liste_FC_Plus.ID=tb_bauteile.[FC_Plus]) LEFT JOIN Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Minus ON Fehlercodes_akt_Liste_FC_Minus.ID=tb_bauteile.[FC_Minus]) LEFT JOIN Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Unterbrechung ON Fehlercodes_akt_Liste_FC_Unterbrechung.ID=tb_bauteile.[FC_Unterbrechung]) LEFT JOIN Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Aderschl ON Fehlercodes_akt_Liste_FC_Aderschl.ID=tb_bauteile.[FC_Aderschl]
WHERE (((tb_Fahrzeug.ID)=[forms]![frm_fahrzeug]![id]));
4

4 回答 4

3

是的.. 增加表之间的记录和连接数会增加执行时间.. LEFT/RIGHT JOIN 绝对不会比 INNER JOIN 快。对表的右列进行索引将提高查询性能。

如果您的查询中有太多的连接并且它的执行频率很高,请采取替代方法,即创建 SQL VIEW 或 Materialized VIEW(Materialized VIEW - 如果您使用的是 Oracle)。

于 2012-05-23T07:10:20.813 回答
1

Well joins显然需要处理,这个处理会消耗cpu、内存和IO。

除此之外,我们还必须考虑,如果没有正确的索引等,连接的性能会非常非常糟糕。

但是,具有正确支持索引的 SQL 连接将比任何其他方法更快地产生您需要的结果。

只需考虑您需要做什么来计算与上述 SQL 相同的结果。读取第一个表,然后按正确顺序排序,然后读取第二个表并对其进行排序,然后合并两个结果集,然后再进行第三个表......或者从第一个表中读取所有行并为每个行发出 SQL 以检索匹配的行。

于 2012-05-23T07:09:26.973 回答
0

连接肯定会降低您将要执行的 SQL 查询的性能。您应该为您编写的 SQL 生成 SQL 计划,并查看降低 SQL 成本的方法。任何查询分析工具都应该可以帮助您。

根据我在上面定义的查询中的理解,您正在尝试从内部连接中的表中获取所有行,并从左连接中的表中获取特定列(如果存在)。

在这种情况下,以以下给定格式编写的查询应该会有所帮助:

select (select Fehlercodes_akt_Liste_FC_Plus.column1 from Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Plus where Fehlercodes_akt_Liste_FC_Plus.ID=tb_bauteile.[FC_Plus]),
    (select Fehlercodes_akt_Liste_FC_Minus.column2 from Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Minus where Fehlercodes_akt_Liste_FC_Minus.ID=tb_bauteile.[FC_Minus]),
    (select Fehlercodes_akt_Liste_FC_Unterbrechung.column3 from Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Unterbrechung where Fehlercodes_akt_Liste_FC_Unterbrechung.ID=tb_bauteile.[FC_Unterbrechung]),
    (select Fehlercodes_akt_Liste_FC_Aderschl.column4 from Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Aderschl where Fehlercodes_akt_Liste_FC_Aderschl.ID=tb_bauteile.[FC_Aderschl]),
    <other columns>
FROM
(tb_Pinnummern INNER JOIN tb_Fahrzeug ON tb_Pinnummern.SG = tb_Fahrzeug.Motor_SG)
INNER JOIN tb_bauteile ON tb_Pinnummern.Bauteil = tb_bauteile.ID) as <aliastablename>

WHERE <aliastablename>.ID=[forms]![frm_fahrzeug]![id];
于 2012-05-23T07:27:21.880 回答
-1

Sql Joins 根本不会降低性能:相反:假设底层数据库模型得到很好的实现,它们通常会成倍地加速查询。索引在这个问题上非常重要。

于 2012-05-23T07:03:59.470 回答