patternsqlMinor
Execution plan for COMPUTE BY
Viewed 0 times
planforexecutioncompute
Problem
I understand that the
How does the query processor execute
Here is some T-SQL to play with:
```
create table employee(
ID int,
name nvarchar (10),
salary int,
start_date datetime,
city nvarchar (10),
region char (1))
GO
insert into employee (ID, name, salary, start_date, city, region)
values (1, 'Jason', 40420, '02/01/94', 'New York', 'W')
insert into employee (ID, name, salary, start_date, city, region)
values (2, 'Robert',14420, '01/02/95', 'Vancouver','N')
GO
insert into employee (ID, name, salary, start_date, city, region)
values (3, 'Celia', 24020, '12/03/96', 'Toronto', 'W')
insert into employee (ID, name, salary, start_date, city, region)
values (4, 'Linda', 40620, '11/04/97', 'New York', 'N')
GO
insert into employee (ID, name, salary, start_date, city, region)
values (5, 'David', 80026, '10/05/98', 'Vancouver','W')
GO
insert into employee (ID, name, salary, start_date, city, region)
values (6, 'James', 70060, '09/06/99', 'Toronto', 'N')
GO
insert into employee (ID, name, salary, start_date, city, region)
values (7, 'Alison',90620, '08/07/00', 'New York', 'W')
GO
insert into employee (ID, name, salary, start_date, city, region)
values (8, 'Chris', 26020, '07/08/01', 'Vancouver','N')
GO
insert into employee (ID, name, salary, start_date, city, region)
values (9, 'Mary', 60020, '06/09/02', 'Toronto', 'W')
GO
select * from employee
GO
/*
ID name salary start_date city region
----------- ----------
COMPUTE BY feature is deprecated. Out of curiosity I would like to know how the query processor executes a COMPUTE BY query. The execution plan does not contain any hint:How does the query processor execute
COMPUTE BY and how can I obtain an accurate execution plan?Here is some T-SQL to play with:
```
create table employee(
ID int,
name nvarchar (10),
salary int,
start_date datetime,
city nvarchar (10),
region char (1))
GO
insert into employee (ID, name, salary, start_date, city, region)
values (1, 'Jason', 40420, '02/01/94', 'New York', 'W')
insert into employee (ID, name, salary, start_date, city, region)
values (2, 'Robert',14420, '01/02/95', 'Vancouver','N')
GO
insert into employee (ID, name, salary, start_date, city, region)
values (3, 'Celia', 24020, '12/03/96', 'Toronto', 'W')
insert into employee (ID, name, salary, start_date, city, region)
values (4, 'Linda', 40620, '11/04/97', 'New York', 'N')
GO
insert into employee (ID, name, salary, start_date, city, region)
values (5, 'David', 80026, '10/05/98', 'Vancouver','W')
GO
insert into employee (ID, name, salary, start_date, city, region)
values (6, 'James', 70060, '09/06/99', 'Toronto', 'N')
GO
insert into employee (ID, name, salary, start_date, city, region)
values (7, 'Alison',90620, '08/07/00', 'New York', 'W')
GO
insert into employee (ID, name, salary, start_date, city, region)
values (8, 'Chris', 26020, '07/08/01', 'Vancouver','N')
GO
insert into employee (ID, name, salary, start_date, city, region)
values (9, 'Mary', 60020, '06/09/02', 'Toronto', 'W')
GO
select * from employee
GO
/*
ID name salary start_date city region
----------- ----------
Solution
How does the query processor execute COMPUTE BY?
It is a hard-coded sequence of operations at the top of the execution tree. There is a simple stream accumulation (hence the ordering requirement), some logic to detect the start of a new group, a little computation and data value copying, and direct calls to construct the alternate TDS result sets per group. Some example call stacks from a query using
and how can I obtain an accurate execution plan?
You can't, because
It is a hard-coded sequence of operations at the top of the execution tree. There is a simple stream accumulation (hence the ordering requirement), some logic to detect the start of a new group, a little computation and data value copying, and direct calls to construct the alternate TDS result sets per group. Some example call stacks from a query using
COMPUTE BY are shown below:and how can I obtain an accurate execution plan?
You can't, because
COMPUTE BY is not implemented in the same way as other plan operations. The replacement ROLLUP support does use the regular execution framework, automatically providing showplan information. An additional benefit of ROLLUP is that it does not use alternate TDS result sets, providing better client compatibility. In short, no one will miss COMPUTE.Context
StackExchange Database Administrators Q#106470, answer score: 4
Revisions (0)
No revisions yet.