嵌套选择子句会降低数据库性能吗?
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)