# Các tips tăng hiệu suất SQL

Mỗi khách hàng hay người dùng đều muốn được trả về dữ liệu nhanh nhất do đó chúng ta cần thiết kế một cơ sở dữ liệu có hiệu suất cao cho mỗi lẫn thao tác với dữ liệu. Không có bất kì cách nào trực tiếp đem lại hiệu suất tốt nhất nhưng chúng ta có thể cải thiện hiệu suất câu lệnh SQL ví dụ như tạo Index , sử dụng join , viết lại subquery để chỉ dùng join v.v...

Là một Lập trình viên chúng ta biết câu lệnh SQL có thể viết trong rất nhiều cách nhưng chúng ta nên follow theo cách tốt nhất để đạt được hiệu suất tốt hơn. Dưới đây là các tips cho chúng ta:

1\. Hãy dùng EXISTS thay vì IN để kiểm tra sự tồn tại của dữ liệu.

2\. Tránh \* trong câu lệnh SELECT. Hãy dùng tên cột thích hợp.

3\. Chọn loại dữ liệu thích hợp . Ví dụ lưu chuỗi sử dụng loại varchar thay vì sử dụng loại Text. Khi muốn sử dụng loại Text, là khi bạn cần lưu dữ liệu lơn (nhiều hơn 8000 ký tự).

4\. Tránh dùng nchar và nvarchar vì cả hai đều tăng bộ nhớ lên gấp đôi so với char và varchar.

5\. Tránh NULL đối với những trường mà đã cố định độ dài. Trong trường hợp yêu cầu là NULL hãy sử dụng một trường loại varchar với độ dài tùy biến thì vẫn lấy space ít hơn là NULL.

6\. Tránh dùng mệnh đề Having. Chỉ dùng khi muốn lọc kết quả trả về.

7\. Hãy tạo ra indexs là cách tốt nhất tăng tốc . Indexs bao gồm Clustered và Non-Clustered.

8\. Hãy giữ index của clustered nhỏ thôi vì trường mà dùng trong cluster index đó thì cũng được dùng trong non-clustered index.

9\. Đa số cột được chọn nên đặt trong non-clustered index.

10\. Những index nào không được dùng thì nên xóa đi.

11\. Tốt hơn là tạo ra index trên những cột có giả trị là số thay vì là ký tự. Giá trị số sử dụng ít bộ nhớ hơn ký tự.

12\. Dùng câu lệnh join thay vì dùng select trong select

13\. Hãy sử dụng mệnh đề WHERE để giới hạn cỡ của bảng kết quả trả về mà được tạo ra với câu lệnh join.

14\. Hãy dùng TABLOCKX trong khi chèn dữ liệu vào bảng và TABLOCK trong khi merging dữ liệu

15\. Sử dụng WITH (NOLOCK) trong khi truy xuất dữ liệu từ bất kỳ một bảng nào.

16\. Dùng SET NOCOUNT ON và sử dụng TRY - CATCH để tránh điều kiện deadlock.

17\. Tránh dùng cursor vì nó ảnh hưởng đến hiệu suất của chương trình rất chậm.

18\. Sử dụng biến TABLE thay vì dùng bảng TEMP. Dùng bảng TEMP đòi hỏi tương tác với cơ sở dữ liệu TEMPDB mà mất thời gian để thực hiện một tác vụ.

19\. Sử dụng UNION ALL thay vì UNION nếu có thể.

20\. Sử dụng tên Schema trước tên đối tượng SQL.

22\. Sử dụng Stored Procedure cho những dữ liệu thường xuyên được sử dụng và những query hỗn hợp , hoặc những câu lệnh chứa nhiều logic phức tạp.

22\. Giữ transaction nhỏ nhất có thể vì transaction khóa việc xử lý dữ liệu bảng và có thể dẫn đến kết quả bị deadlocks.

23\. Tránh tiền tố “sp\_” với tên store procedure người dùng tự định nghĩa bởi vì SQL server đầu tiên tìm kiếm những thủ tục người dùng định nghĩa trong cơ sở dử liệu master và sau đó mới sử dụng phiên làm việc của cơ sở dữ liệu hiện hành.

24\. Tránh dùng câu query Non-correlated . Sử dụng câu query này như một câu query riêng instead thay vì là query chính và lưu output trong một biến, mà có thể tham chiếu đến câu query chính hoặc là một phần sau của batch.

25\. Tránh Table Valued Functions (TVFs) với nhiều câu lệnh. Vì nó giảm hiệu suất

_Via_ [_Viblo_](https://viblo.asia/p/25-tip-de-tang-hieu-suat-cho-cau-lenh-sql-MgNeWXZgkYx)
