我发现在使用公共子表达式假脱机的执行计划中,报告的逻辑读取对于大型表来说非常高.
经过一些试验和错误后,我发现了一个似乎适用于下面的测试脚本和执行计划的公式. 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) 参考这个问题:
我如何在单个查询中获得记录计数的百分比,如下所示:
ItemId count Percent
------------------------------------
1 2 33.3
2 0 0
3 1 16.6
4 3 50.0
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在2012 MS-SQL服务器上运行,并且在其他字段中有一个包含Age,Gender的表USER,以及一个包含销售记录的SALES表.
我目前正在计算销售排行榜,显示由其销售人员订购的销售人员列表,以便举例说明此列表根据其最高销售额返回各种销售代表.在列表中间的某个地方,我们有托马斯先生,让我们说#4.
我目前的任务是展示Thomas与具有与他相同年龄的销售代表的比较,以及他与具有与他相同性别的销售代表的比较.计算将返回与上述整体列表不同的结果.
我理想的存储过程将收到1个参数(UserId)并返回以下单个记录值:OverallPosition,OverallPositionTotalCount,AgePosition,AgeTotalCount,GenderPosition,GenderTotalCount
数据样本:
CREATE TABLE dbo.User
(
UserId int NOT NULL IDENTITY (1, 1),
Name nvarchar(50) NOT NULL,
Age int NULL,
Gender nvarchar(10) NULL
)
1, James, 30, 'male'
2, Monica, 27, 'female'
3, Paul, 30, 'male'
4, Thomas, 30, 'male'
5, Mike, 22, 'male'
6, Sabrina, 30, 'female'
CREATE TABLE dbo.Sales
(
SalesId int NOT NULL IDENTITY (1, 1),
UserId int NOT NULL,
TotalSale int NOT NULL
) ON [PRIMARY]
1, 1, $900,000
2, 1, $1,000,000 …Run Code Online (Sandbox Code Playgroud)