Điều này thực sự khó hơn so với vẻ ngoài - một DBMS hiện đại điển hình (và MS SQL Server cũng không phải là ngoại lệ) đôi khi sẽ quét toàn bộ bảng ngay cả khi có chỉ mục, đơn giản vì điều đó có thể nhanh hơn trên một lượng nhỏ dữ liệu.
Ví dụ:
-
Câu lệnh cuối cùng trong ví dụ SQL Fiddle này có thể được đáp ứng bởi chỉ mục, nhưng kế hoạch truy vấn đã chỉ ra rõ ràng việc quét bảng:
-
Nhưng nếu chúng tôi chèn một số dữ liệu , chỉ mục được sử dụng:
Hơn nữa, quyết định mà DBMS đưa ra có thể bị ảnh hưởng bởi mức độ mới / chính xác của thống kê đang.
Kiểm tra đáng tin cậy nhất để biết liệu chỉ mục có được sử dụng hay không là chỉ cần điền vào cơ sở dữ liệu của bạn với lượng dữ liệu đại diện và sau đó xem kế hoạch thực thi . Và đừng quên tính thời gian thực hiện truy vấn thực tế, khi bạn đang ở đó!
Một ví dụ đơn giản hơn:nếu toàn bộ bảng vừa với một trang cơ sở dữ liệu duy nhất, thì chỉ cần tải trang đó và lướt qua nó tuần tự sẽ nhanh hơn so với đợi I / O bổ sung cho trang chứa chỉ mục.