0% found this document useful (0 votes)
28 views

SQL Optimization

Uploaded by

Thuy Duong Ngo
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
28 views

SQL Optimization

Uploaded by

Thuy Duong Ngo
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 20

SQL Optimization

<Trainer-Name>

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


Agenda
 SQL Optimization Tips

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


SQL Optimization Objectives
 Optimize SQL statement
 Enhance performance system: trả về kết

quả trong thời gian ngắn nhất và sử dụng


tài nguyên ít nhất.

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


SQL Optimization Tips 1/12

The sql query becomes faster if you


use the actual columns names in
SELECT statement instead of than '*'.
Using:
SELECT id, first_name, last_name, age,
subject FROM student_details;
Instead of:
 SELECT * FROM student_details;

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


SQL Optimization Tips 2/12
 HAVING clause is used to filter the rows after all the
rows are selected. It is just like a filter. Do not use
HAVING clause for any other purposes.
Using:
SELECT subject, count(subject) FROM student_details
WHERE subject != 'Science'
AND subject != 'Maths'
GROUP BY subject;
Instead of:
SELECT subject, count(subject) FROM student_details
GROUP BY subject
HAVING subject!= 'Vancouver' AND subject!= 'Toronto';

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


SQL Optimization Tips 3/12
 Sometimes you may have more than one subqueries in your
main query. Try to minimize the number of subquery block in
your query.

 Using:
SELECT name FROM employee
WHERE (salary, age) = (SELECT MAX (salary), MAX (age)
FROM employee_details) AND dept = 'Electronics';
Instead of:
SELECT name FROM employee
WHERE salary = (SELECT MAX(salary) FROM employee_details)
AND age = (SELECT MAX(age) FROM employee_details)
AND emp_dept = 'Electronics';

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


SQL Optimization Tips 4.1/12

 Use operator EXISTS, IN and table


joins appropriately in your query.
a) Usually IN has the slowest
performance.
b) IN is efficient when most of the
filter criteria is in the sub-query.
c) EXISTS is efficient when most of
the filter criteria is in the main query.

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


SQL Optimization Tips 4.2/12

Using:
Select * from product p
where EXISTS (select * from order_items
o
where o.product_id = p.product_id)
Instead of:
Select * from product p
where product_id IN
(select product_id from order_items )

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


SQL Optimization Tips 5/12
 Use EXISTS instead of DISTINCT when using joins
which involves tables having one-to-many
relationship.
Using:
SELECT d.dept_id, d.dept
FROM dept d
WHERE EXISTS ( SELECT 'X' FROM employee e
WHERE e.dept = d.dept);
Instead of:
SELECT DISTINCT d.dept_id, d.dept
FROM dept d,employee e
WHERE e.dept = e.dept;

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


SQL Optimization Tips 6/12
 Try to use UNION ALL in place of UNION
Using:
SELECT id, first_name FROM
student_details_class10
UNION ALL
SELECT id, first_name FROM sports_team;
Instead of:
SELECT id, first_name, subject FROM
student_details_class10
UNION
SELECT id, first_name FROM sports_team;
© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4
SQL Optimization Tips 7.1/12
 Be careful while using conditions in WHERE
clause.
Using:
SELECT id, first_name, age
FROM student_details
WHERE first_name LIKE 'Chan%';
Instead of:
SELECT id, first_name, age
FROM student_details
WHERE SUBSTR(first_name,1,3) = 'Cha';
© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4
SQL Optimization Tips 7.2/12

Using:
SELECT product_id, product_name
FROM product
WHERE unit_price BETWEEN MAX(unit_price)
and MIN(unit_price)
 Instead of:
SELECT product_id, product_name
FROM product
WHERE unit_price >= MAX(unit_price)
and unit_price <= MIN(unit_price)

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


SQL Optimization Tips 7.3/12

Use non-column expression on one side of the


query because it will be processed earlier.
Using:
SELECT id, name, salary
FROM employee
WHERE salary < 25000;
Instead of:
SELECT id, name, salary
FROM employee
WHERE salary + 10000 < 35000;
© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4
SQL Optimization Tips 8/12
 Use DECODE to avoid the scanning of same rows or
joining the same table repetitively. DECODE can also
be made used in place of GROUP BY or ORDER BY
clause.
Using:
 SELECT id FROM employee
WHERE name LIKE 'Ramesh%'
and location = 'Bangalore';
 Instead of:
 SELECT DECODE(location,'Bangalore',id,NULL) id
FROM employee
WHERE name LIKE 'Ramesh%';

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


SQL Optimization Tips 9/12
 To store large binary objects, first place
them in the file system and add the file
path in the database.

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


SQL Optimization Tips 10/12
 To write queries which provide efficient
performance follow the general SQL
standard rules.
a) Use single case for all SQL verbs
b) Begin all SQL verbs on a new line
c) Separate all words with a single space
d) Right or left aligning verbs within the
initial SQL verb

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


SQL Optimization Tips 11/12

Nhất thiết phải chỉ định item trong câu lệnh INSERT.
  Table-A
Key1  
   
CHAR(1)
Col1  
CHAR(1)
 ①  INSERT
Col2     INTO   Table-A   VALUES ( ‘1’ ,‘A’,‘X’ )
 ②  INSERT
CHAR(1)   INTO   Table-A  ( Key1,Col1,Col2 )
      VALUES ( ‘1’ ,‘A’,‘X’ )

  Cả ① và ② đều output ra kết quả giống nhau nhưng,


  ① là trường hợp số item trong Table-A tăng thì bị lỗi.
  ② là trường hợp số item trong Table-A tăng thì không bị lỗi.
⇒   Nhất định phải chỉ định item.

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4


SQL Optimization Tips 12.1/12

Hãy sử dụng mệnh đề ON cho điều kiện kết hợp


 
   Table-A Table-B
Key1   Key1  
CHAR(1) CHAR(1)
Col1   Col3  
CHAR(1) CHAR(1)
 ① 
Col2 SELECT
  A.Key1 , B.Col3
CHAR(1)
     FROM   Table-A   as   A   ,Table-B as B
     WHERE   A.Key1 = B.Key1
        AND   A.Col1   = ‘x’

 ②  SELECT A.Key1 , B.Col3


     FROM   Table-A   as   A  
     INNER JOIN   Table-B as B
       ON   A.Key1   = B.Key1
     WHERE   A.Col1   =‘x’

 
© ©FPT
FPTSOFTWARE
SOFTWARE– –TRAINING 18 – Internal use
TRAINING MATERIAL
MATERIAL 04e-BM/DT/HDCV/FSOFT
04e-BM/NS/HDCV/FSOFT v2/4
v2.2
SQL Optimization Tips 12.2/12

Ví dụ sử dụng mệnh đề ON
SQL không dùng mệnh đề ON SQL có sử dùng mệnh đề ON

SELECT A.Key1 , B.Col1 , C.Col2 SELECT A.Key1 , B.Col1 , C.Col2


FROM A-Table A FROM A-Table A
INNER JOIN B-Table B INNER JOIN B-Table B
INNER JOIN C-Table C ON A.Key1 = B.Key1
INNER JOIN C-Table C
WHERE A.Key1 = B.Key1 ON A.Key1 = C.Key1
AND A.Key1 = C.Key2 WHERE A.Col1 = '123'
AND A.Col1 = '123' AND B.Col2 like 'A%‘
AND B.Col2 like 'A%‘

Bảng thực hiện JOIN và các điều kiện Bảng thực hiện JOIN và các điều kiện
của nó bị tách ra nên khó đọc câu lệnh của nó ở cùng một chỗ thì sẽ dễ đọc câu
SQL . lệnh SQL.

© ©FPT
FPTSOFTWARE
SOFTWARE– –TRAINING 19 – Internal use
TRAINING MATERIAL
MATERIAL 04e-BM/DT/HDCV/FSOFT
04e-BM/NS/HDCV/FSOFT v2/4
v2.2
Q&A

Q&A

© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/4

You might also like