1. Bất kỳ một Index nào cũng làm tăng thời gian để thực hiện các câu lệnh INSERTS, UPDATES, DELETES vì vậy số Index không nên quá nhiều. Cố gắng hạn chế, khoảng 4-5 index trên một bảng, không nên nhiều. Nếu bạn có bảng dữ liệu chỉ để chỉ đọc, khi đó số lượng index có thể gia tăng.
2. Giữ index càng nhỏ càng tốt. Giúp giảm bớt kích thước index và giảm bớt số yêu cầu để đọc index.
3. Nên tạo Index trên các cột mà có giá trị là Interger hơn là giá trị chuỗi.
4. Nếu bạn tạo ra một index hỗn hợp(gồm nhiều cột), thứ tự của những cột là khóa rất quan trọng. Cố gắng đặt thứ tự các cột là khóa làm tăng khả năng Select, với hầu hết các cột Select để bên trái của khóa.
5. Nếu bạn muốn dùng lệnh Join nhiều bảng, cố gắng tạo các khóa đại diện có kiểu dữ liệu là interger cho mục đích này và tạo index trên những cột đó.
6. Tạo khóa chính đại diện là kiểu Interger(ví dụ: identity) nếu mà bảng dữ liệu đó không có nhiều thao tác insert.
7. Clustered indexes là được yêu thích hơn noclustered, nếu bạn cần chọn một vùng giá trị hay bạn cần sắp xếp tập kết quả với GROUP BY hay ORDER BY.
8. Nếu ứng dụng của bạn sẽ thực hiện cùng một truy vấn nhiều lần trên một bảng, nên xem xét việc tạo một index trên toàn bảng.
9. Bạn có thể dùng SQL Server Profile để tạo Trace Wizard với “Identify Scans of Large Tables” để theo dõi xem những bảng nào trong Cơ sở dữ liệu cần index. Theo dõi này sẽ hiển thị những bảng nào cần index được scan bởi các câu truy vấn thay vì dùng index.
10. Chúng ta có thể dùng sp_MSforeachtable không phải được document Store Procedure để tạo lại tất cả index trong Cơ sở dữ liệu. Thử lập thời khóa biểu để thực thi trong lúc CPU idle và trong thời gian thực thi chậm. sp_MSforeachtable @command1=”print ‘?’ DBCC DBREINDEX (‘?’)”