Tối ưu hóa câu lệnh SQL

1. Sử dụng lệnh UNION ALL thay cho lệnh UNION bất cứ khi nào có thể

Lệnh UNION ALL chạy nhanh hơn lệnh UNION vì nó không kiểm tra các bản ghi trùng lặp, trong khi đó lệnh UNION luôn luôn kiểm tra các bản ghi xem có trùng lặp hay không.

2. Sử dụng thêm lệnh SET NOCOUNT ON trong các stored procedures

Thông thường T-SQL sẽ thông báo tổng số các bản ghi bị tác động khi thực thi một lệnh SQL. Tuy nhiên, nếu chúng ta sử dụng lệnh SET NOCOUNT ON ở đầu các stored procedures thì hệ thống không trả về thông báo nữa. Việc này tiết kiệm lưu lượng mạng chút xíu.

3. Hạn chế hết mức việc sử dụng mệnh đề DISTINCT

Mệnh đề DISTINCT làm chậm hệ thống đi trông thấy. Hãy hạn chế sử dụng

4. Hạn chế sử dụng các trigger, thay bằng các constraints khi có thể

Sử dụng constraints hiệu quả hơn các triggers

5. Sử dụng SYSINDEXES để lấy số bản ghi

Hầu hết chúng ta sử dụng lệnh COUNT(*) để lấy số bản ghi, tuy nhiên bảng sysindexes lưu trữ tổng số bản ghi của tất cả các bảng dữ liệu người dùng do vậy chúng ta có thể lấy từ bảng này thay vì dùng lệnh COUNT(*). Ngoài ra còn có một số cách khác nữa.

SELECT rows FROM sysindexes WHERE id = OBJECT_ID('table_name')

6. Sử dụng VIEW và Stored Procedure  thay cho các câu lệnh truy vấn phức tạp

7. Sử dụng giải mã nếu có thể

Để tránh phải duyệt một bản ghi nhiều lần, DECODE có thể được sử dụng trong các câu lệnh GROUP BY và ORDER BY.

Ví dụ:

SELECT id FROM employee 
WHERE name LIKE 'Arun%' 
and location = 'USA';

Thay vì

SELECT DECODE(location,'USA',id,NULL) id FROM employee 
WHERE name LIKE 'Arun%';

 

8. Giảm thiểu các sub query

SELECT name FROM employee WHERE (sal, experience) = (SELECT MAX (sal), MAX (experience) FROM employee_details) AND dept = 'Accounts';

9. Chỉ nên so sánh các loại giá trị cùng kiểu

So sánh cùng kiểu giúp hệ thống không phải chuyển kiểu do đó cải thiện tốc độ

Ví dụ:

ON DECIMAL(A.INTCOL, 7, 0) = B.DECICOL

ON A.INTCOL = INTEGER(B.DECICOL)

10. Chỉ trả về các cột dữ liệu cần thiết

Trả về toàn bộ dữ liệu sẽ làm tăng dung lượng mạng. Do vậy hãy hạn chế nếu có thể

Advertisements
Standard

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s