相关疑难解决方法(0)

为什么窗口聚合函数的逻辑读取如此之高?

我发现在使用公共子表达式假脱机的执行计划中,报告的逻辑读取对于大型表来说非常高.

经过一些试验和错误后,我发现了一个似乎适用于下面的测试脚本和执行计划的公式. Worktable logical reads = 1 + NumberOfRows * 2 + NumberOfGroups * 4

我不明白为什么这个公式成立的原因.这比我想象的更有必要看一下这个计划.任何人都可以通过吹嘘这个帐户的内容来打击这个吗?

或者失败那是否有任何方法来跟踪每个逻辑读取中读取的页面,以便我可以自己解决?

SET STATISTICS IO OFF; SET NOCOUNT ON;

IF Object_id('tempdb..#Orders') IS NOT NULL
  DROP TABLE #Orders;

CREATE TABLE #Orders
  (
     OrderID    INT IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED,
     CustomerID NCHAR(5) NULL,
     Freight    MONEY NULL,
  );

CREATE NONCLUSTERED INDEX ix
  ON #Orders (CustomerID)
  INCLUDE (Freight);

INSERT INTO #Orders
VALUES (N'ALFKI', 29.46), 
       (N'ALFKI', 61.02), 
       (N'ALFKI', 23.94), 
       (N'ANATR', 39.92), 
       (N'ANTON', 22.00);

SELECT PredictedWorktableLogicalReads = 
        1 + …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

22
推荐指数
1
解决办法
2584
查看次数

我可以从sql server中的一个sql查询中获取count()和行吗?

我想获得结果的总数和一些查询的前n行 - 是否可以在一个语句中?

我希望结果如下:

count(..) column1        column2
125         some_value   some_value
125         some_value   some_value
Run Code Online (Sandbox Code Playgroud)

先感谢您!

sql t-sql sql-server aggregate

6
推荐指数
3
解决办法
6154
查看次数

在WHERE和FROM中添加过滤器

所以我知道在查询的WHERE子句中添加过滤条件是一种很好的编程习惯,这样可以最大限度地减少连接中返回的行数,但是我们如何决定是否应该在WHERE中添加过滤器而不是FROM?例如:

SELECT a.ColA, a.ColB, a.ColC, b.ColD, b.ColE
FROM TblA a INNER JOIN TblB b
On a.ColA = b.ColD
AND a.ColA = 'X' 
AND a.ColB = 'Y'
WHERE b.ColD = 'ABC'
Run Code Online (Sandbox Code Playgroud)

在这个查询中,如果我在AND子句而不是WHERE中添加b.ColD怎么办?这会不会使查询更有效率?我知道两种方法的结果有时会有所不同,但我不知道为什么?

谢谢.

sql t-sql sql-server performance

5
推荐指数
2
解决办法
186
查看次数