The following are the 5 useful tips to tune and optimize Oracle SQL query.
1. Use Table Joins Rather than Multiple Queries
SELECT empno, ename, deptno
FROM scott_emp
WHERE empno = 7369;
SELECT department_name
FROM dept
WHERE department_id = 20;
SELECT a.empno,
a.ename,
a.deptno,
b.department_name
FROM scott_emp a, dept b
WHERE empno = 7369 AND a.deptno = b.department_id;
2. Use Fully Qualified Column References In Where Clause
SELECT empno,
ename,
deptno,
department_name
FROM scott_emp, dept
WHERE empno = 7369 AND deptno = department_id;
SELECT a.empno,
a.ename,
a.deptno,
b.department_name
FROM scott_emp a, dept b
WHERE a.empno = 7369 AND a.deptno = b.department_id;
3. Use CASE Expressions Rather than Multiple Queries
SELECT COUNT ( * )
FROM scott_emp
WHERE deptno = 20;
SELECT COUNT ( * )
FROM scott_emp
WHERE deptno = 30;
SELECT COUNT ( * )
FROM scott_emp
WHERE deptno = 40;
Instead of this you can perform this task in a single query, here is the example:
SELECT COUNT (CASE WHEN deptno = 20 THEN 1 ELSE NULL END) dept_20,
COUNT (CASE WHEN deptno = 30 THEN 1 ELSE NULL END) dept_30,
COUNT (CASE WHEN deptno = 40 THEN 1 ELSE NULL END) dept_40
FROM scott_emp;
4. Use Exists Rather Than IN
SELECT a.empno, a.ename
FROM scott_emp a
WHERE a.deptno IN (SELECT b.department_Id
FROM dept b);
SELECT a.empno, a.ename
FROM scott_emp a
WHERE EXISTS (SELECT 1
FROM dept b
WHERE b.department_id = a.deptno);