查询效率

Cra*_*aig 2 sql sql-server

我想知道哪个是从大型数据库查询数据的最佳方法.

假设我需要获取所有居住在美国的用户的列表,以及他们的订单和属于他们订单的产品.为简单起见,我们有一个user表,其中有一个CountryId表...然后是一个Order表,带有userId..然后可能是一个OrderProduct表,列出许多产品到订单(许多订单可以包含相同的产品).

我的问题是,或许可以通过创建临时表来更好

SELECT userId FROM dbo.User WHERE countrId = @CountryId
Run Code Online (Sandbox Code Playgroud)

我们现在在临时表中有相关​​用户.

然后,做一个

Select p.ProductDescription ... 
From @TempTable tmp 
INNER JOIN Order o 
ON o.UserId = tmp.UserId 
INNER JOIN OrderProduct op
ON op.OrderID = o.OrderId
INNER JOIN Product p
ON p.ProductId = op.ProductId
Run Code Online (Sandbox Code Playgroud)

所以,我正在做的是获取我需要的用户....并将其移动到临时表中,然后使用该临时表来过滤主查询的数据.

或者,它是否有效,如果不是更多,只需一个人做到这一点......

Select ... from User u
INNER JOIN Order o
....
WHERE u.UserId = @UserId 
Run Code Online (Sandbox Code Playgroud)

bti*_*lly 5

通常,您希望在一个查询中编写整个请求,因为这为数据库查询优化器提供了提供最有效可能性的最佳机会.有了一个像样的数据库,它通常会在这方面做得很好,而你所做的任何努力都有助于它的帮助.

如果数据库速度不够快,首先要考虑的是你是否拥有正确的索引,调整数据库等等.这些是导致问题的最常见原因,应该能够及时清除大多数剩余的问题.

只有在您为数据库提供了以正确方式获得正确答案的每一个机会之后,您是否应该考虑尝试使用临时表来强制执行特定的查询计划.(使用临时表还有其他原因.但是为了获得良好的查询计划,它应该是最后的手段.)

关于优化的一对旧规则适用于黑桃.

  1. 别.
  2. (仅限专家.)还没有.