嵌套选择子句会降低数据库性能吗?

Posted

技术标签:

【中文标题】嵌套选择子句会降低数据库性能吗?【英文标题】:Is nested select clause decreases the database performance?? 【发布时间】:2011-11-20 01:44:12 【问题描述】:

我曾经在side select子句中编写select子句以避免加入from子句。但我担心这是一种很好的编码实践,否则会降低数据库性能。下面是包含多个表的查询,但我使用嵌套选择子句编写了它,没有任何连接语句。如果我犯了任何错误或者没关系,请告诉我。此刻,我得到了准确的结果。

SELECT * ,
       (select POrderNo from PurchaseOrderMST POM 
        where POM.POrderID=CET.POrderID)as POrderNo,
       (select SiteName from SiteTRS ST where ST.SiteID=CET.SiteID)as SiteName,
       (select ParticularName from ParticularMST PM where   
        PM.ParticularID=CET.ParticularID)as ParticulerName  
FROM ClaimExpenseTRS CET
WHERE ClaimID=@ClaimID  

【问题讨论】:

可能重复:***.com/questions/1067016/… 【参考方案1】:

我会为此使用连接,因为这样做是最佳做法,并且对查询优化器会更好。

但是为了学习,只需尝试使用 join 和 without 执行脚本,看看查询计划和执行时间会发生什么。通常这会立即回答您的问题。

【讨论】:

【参考方案2】:

您的解决方案很好。 只要您只为每个“连接”表使用 1 列,并且没有多个匹配行,就可以了。在某些情况下,甚至比加入更好。 (数据库引擎可以随时更改连接的方向,如果您不使用技巧来强制给定方向,这可能会导致性能意外。这称为查询优化,但就您真正了解数据库而言,您应该决定如何运行查询)。

【讨论】:

【参考方案3】:

我认为你确实应该加入。 现在您可以使用 where 和 select 语句创建自己的 JOIN。

【讨论】:

JOIN 不是最佳解决方案。不推荐 那么实现你自己的join语句比build in更好吗? 我希望 Gaurav Shah 是在开玩笑,虽然没有迹象表明他在开玩笑:(

以上是关于嵌套选择子句会降低数据库性能吗?的主要内容,如果未能解决你的问题,请参考以下文章

WHERE 子句中的 OR 会降低 sql 查询性能(sql server)

UITableViewCell 中嵌套的 UIStackViews,会减慢滚动速度,降低性能。如何提高性能?

未使用的 use 语句会降低性能吗?

如何证明在 SQL 中使用子选择查询会降低服务器的性能

Oracle 在 IN 子句中使用子查询降低性能

Oracle SQL - FROM 子句中的 JOIN 顺序会影响性能优化吗?