You are on page 1of 2

Teradata provides a feature using which you can get Stat collection recommendations

from the Optimizer. You can collect stats on the columns recommended so that the
Optimizer comes up with the best plan. Lets see how to use this feature below.
First, lets create some tables for our exercise.
CREATE MULTISET TABLE RS_DB.DEPARTMENT
(
DEPT_NO INTEGER,
DEPT_NAME VARCHAR(20)
) UNIQUE PRIMARY INDEX (DEPT_NO);

CREATE MULTISET TABLE RS_DB.EMPLOYEE


(
EMP_NO INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 100 INCREMENT BY
1 MINVALUE 100 MAXVALUE 2000000),
EMP_FNAME VARCHAR(20),
EMP_LNAME VARCHAR(20),
EMP_DEPT INTEGER,
EMP_SALARY DECIMAL(10,2)
) UNIQUE PRIMARY INDEX (EMP_NO);

INSERT INTO RS_DB.DEPARTMENT(1,'IT');


INSERT INTO RS_DB.DEPARTMENT(2,'Finance');
INSERT INTO RS_DB.DEPARTMENT(3,'Human Resources');
INSERT INTO RS_DB.DEPARTMENT(4,'Operations');
INSERT INTO RS_DB.DEPARTMENT(5,'Contracts');

INSERT INTO RS_DB.EMPLOYEE (EMP_FNAME,EMP_LNAME,EMP_DEPT,EMP_SALARY) VALUES


('John','Doe',1,10000);
INSERT INTO RS_DB.EMPLOYEE (EMP_FNAME,EMP_LNAME,EMP_DEPT,EMP_SALARY) VALUES
('Steven','Gerrard',2,100000);
INSERT INTO RS_DB.EMPLOYEE (EMP_FNAME,EMP_LNAME,EMP_DEPT,EMP_SALARY) VALUES
('Luis','Suarez',3,90000);
INSERT INTO RS_DB.EMPLOYEE (EMP_FNAME,EMP_LNAME,EMP_DEPT,EMP_SALARY) VALUES
('Lucas','Leiva',4,80000);
INSERT INTO RS_DB.EMPLOYEE (EMP_FNAME,EMP_LNAME,EMP_DEPT,EMP_SALARY) VALUES
('Glen','Johnson',5,70000);
INSERT INTO RS_DB.EMPLOYEE (EMP_FNAME,EMP_LNAME,EMP_DEPT,EMP_SALARY) VALUES
('Jose','Enrique',1,50000);
INSERT INTO RS_DB.EMPLOYEE (EMP_FNAME,EMP_LNAME,EMP_DEPT,EMP_SALARY) VALUES
('Daniel','Agger',2,75000);
INSERT INTO RS_DB.EMPLOYEE (EMP_FNAME,EMP_LNAME,EMP_DEPT,EMP_SALARY) VALUES
('Daniel','Sturridge',4,70000);
INSERT INTO RS_DB.EMPLOYEE (EMP_FNAME,EMP_LNAME,EMP_DEPT,EMP_SALARY) VALUES
('Fabio','Borini',5,50000);
INSERT INTO RS_DB.EMPLOYEE (EMP_FNAME,EMP_LNAME,EMP_DEPT,EMP_SALARY) VALUES
('Struart','Downing',5,50000);
/*Generating a bigger set of Employees */
INSERT INTO RS_DB.EMPLOYEE (EMP_NO,EMP_FNAME,EMP_LNAME,EMP_DEPT,EMP_SALARY)
SELECT 110+CSUM(1,1),E1.EMP_FNAME,E2.EMP_LNAME,RANDOM(1,5) AS
EMP_DEPT,RANDOM(10000,120000) AS EMP_SALARY
FROM RS_DB.EMPLOYEE E1
CROSS JOIN RS_DB.EMPLOYEE E2
CROSS JOIN RS_DB.EMPLOYEE E3
CROSS JOIN RS_DB.EMPLOYEE E4
CROSS JOIN RS_DB.EMPLOYEE E5
;
With the tables now ready, we are ready to go.
To enable collect stat recommendations, run the following command in BTEQ or SQL
Assistant
DIAGNOSTIC HELPSTATS ON FOR SESSION;
Once this is done, we just need to run an explain on the query to get
recommendations.
EXPLAIN SELECT D.DEPT_NAME,
COUNT(E.EMP_NO) AS NUM_OF_EMPLOYEES,
AVG(E.EMP_SALARY) AS AVERAGE_SALARY,
SUM(E.EMP_SALARY) TOTAL_SALARY_PER_DEPARTMENT
FROM RS_DB.EMPLOYEE E
INNER JOIN RS_DB.DEPARTMENT D
ON E.EMP_DEPT = D.DEPT_NO
GROUP BY 1;

You might also like