1. Dùng các View hay Stored Procedure thay vì dùng những câu lệnh truy vấn dài. Cách này giúp chúng ta làm giảm giao dịch qua mạng, bởi vì máy khách chỉ cần gởi tên của View hay SP cho máy chủ( có thêm một số tham số) thay vì những dòng văn bản dài. Điều này cũng tạo điều kiện để quản lý phân quyền trong SQL Server, bởi vì bạn có thể hạn chế việc truy cập của các User đến những cột của một bảng mà họ không được truy vấn.
2. Nên dùng Constraints thay cho Triggers, khi có thể. Constraints là hiệu quả hơn Triggers và giúp tăng tốc việc thực hiện. Vì vậy, bạn nên dùng Constraints thay cho Triggers ngay khi có thể.
3. Dùng table variables thay vì dùng temporary tables. Table variables yêu cầu tài nguyên locking và logging ít hơn temporary tables. Vì vậy, Table variables nên được dùng ngay khi có thể.
Lưu ý: Table variables chỉ tồn tại với phiên bản SQL Server 2000.
4. Nên dùng câu lệnh UNION ALL thay cho UNION, khi có thể. Câu lệnh UNION ALL là nhanh hơn UNION, bởi vì câu lệnh UNION ALL sẽ không tìm ra những dòng dữ liệu trùng nhau còn UNION sẽ tìm ra những dòng dữ liệu trùng nhau cho dù sự trùn đó có hay không.
5. Nên tránh dùng mệnh đề DISTINCT, khi có thể. Bởi vì dùng mệnh đề DISTINCT kết quả thực thi sẽ chậm. Bạn chỉ nên dùng mệnh đề đó khi cần thiết.
6. Tránh dùng Cursor trong SQL Server, khi có thể. Dùng Cursor trong SQL Server dẫn đến kết quả là làm giảm tốc độ hơn so với những câu lệnh Select. Cố gắng dùng các câu Select lồng nhau hay là dùng bảng tạm nếu muốn bạn muốn thao tác trên từng dòng dữ liệu.
7. Nên tránh dùng mệnh đề HAVING, khi có thể. Mệnh đề HAVING dùng để giới hạn bớt kết quả trả về bởi mệnh đề GROUP BY. Khi dùng mệnh đề GROUP BY với mệnh đề HAVING, mệnh đề GROUP BY sẽ chia tất cả các dòng thành những tập hợp gồm nhiều tập hợp của các dòng và những giá trị của nó. Khi đó, mệnh đề HAVING sẽ hạn chế kết quả xuất ra không mong muốn của các tập hợp đó. Trong nhiều trường hợp, ta có thể viết câu lệnh SELECT mà chỉ có mệnh đề WHERE, GROUP BY không cần mệnh đề HAVING. Cách viết này sẽ cải thiện tốc độ câu truy vấn của bạn.
8. Nếu chúng ta muốn lấy tổng số dòng trong bảng, chúng ta nên thay thế cách dùng câu lệnh thông thường là Select count(*). Bởi vì, câu lệnh Select count(*) yêu cầu thực hiện quét toàn bộ bảng để cho ra kết quả tổng số dòng. Điều này sẽ mất nhiều thời gian nếu bảng này chứa dữ liệu lớn. Có một cách khác để xác định tổng số dòng trong một bảng. Bạn có thể dùng bảng hệ thống là: sysindexes trong trường hợp này. Có cột tổng số dòng trong trong bảng. Cột này chứa tổng số dòng cho mỗi bảng trong cơ sở dữ liệu.Vì vậy bạn có thể dùng câu lệnh sau thay vì dùng câu lệnh SELECT COUNT(*)
Select rows FROM sysindexes WHERE id = OBJECT_ID(‘table_name’) and indid < 2
Với câu lệnh này bạn có thể giảm bớt tốc độ truy vấn gấp nhiều lần.
9. Thêm câu lệnh SET NOCOUNT ON vào Stored Procedures để dừng thông báo về số dòng được thực thi bởi câu lệnh T-SQL. Điều này làm giảm giao dịch mạng, bởi vì máy khách sẽ không nhận được thông báo về số dòng bị tác động bởi câu lệnh T-SQL.
10. Nên dùng mệnh đề WHERE để hạn chế bớt kết quả truy vấn. Điều này mang lại kết quả tốt cho các truy vấn. Bởi vì SQL chỉ trả về những dòng cụ thể cho máy khách, chứ không phải tất cả các dòng trong một bảng. Điều này làm giảm giao dịch qua mạng và tăng tốc câu lệnh truy vấn.
11. Dùng những câu lệnh với từ khóa TOP hoặc câu lệnh SET ROWCOUNT nếu bạn muốn kết quả trả về chỉ là n dòng đầu tiên. Điều này có thể cải thiện tốc độ của các truy vấn, bởi vì tập kết quả trả về ít hơn được trả về. Điều này giảm bớt giao dịch giữa máy chỉ và máy trạm.
12. Cố gắng hạn chế tập kết quả của các truy vấn bằng việc chỉ trả về những cột cụ thể từ một bảng, không phải tất cả các cột của bảng đó. Nếu làm vậy thì việc thực thi sẽ nhanh hơn bởi vì SQL Server sẽ chỉ trả về những cột cụ thể, không phải tất cả các cột của bảng. Nó sẽ giảm bớt giao dịch mạng và tăng tốc câu lệnh truy vấn.
– Indexes.
– Tránh có nhiều trigger trên một bảng dữ liệu.
– Không cần thiết phải dùng các lệnh join phức tạp.
– Sửa lại cách dùng mệnh đề Group by với danh sách được chọn.
– Điều tệ hại nhất là không chuẩn hóa dạng chuẩn.