Những lệnh đó làm hai việc:
- Xóa bộ đệm trang, nơi lưu trữ các trang dữ liệu đã được truy xuất từ đĩa (thông thường yếu tố lớn nhất trong thời gian truy vấn là truy cập đĩa)
- Xóa bộ đệm của kế hoạch truy vấn, có nghĩa là máy chủ cần tạo một gói truy vấn mới. Điều này thường không đáng kể ngoại trừ khối lượng giao dịch rất cao.
Về cơ bản, bạn đang có một thời gian tương đương với kịch bản "trường hợp xấu nhất" - bạn vừa khởi động lại máy chủ và không có gì trong bộ nhớ. Các lần chạy tiếp theo không cần phải trả chi phí để lấy dữ liệu từ đĩa vì các trang đó đã được tải vào bộ nhớ.
Điều này tương tự như tình huống trong thế giới thực - người dùng đầu tiên của bạn để chạy một truy vấn cụ thể có thể sẽ phải chờ lâu hơn so với các lần chạy tiếp theo, giả sử bạn đang kiểm tra cùng một dữ liệu.
Một phương pháp tốt mà tôi muốn sử dụng là chạy nhiều lần và lấy trung bình. Điều này đặc biệt hữu ích trong môi trường dùng chung vì bạn không có toàn quyền kiểm soát các tài nguyên được chia sẻ như tempdb.
Bạn cũng có thể sử dụng các lệnh này để có thêm thông tin về những gì thực sự xảy ra đằng sau hậu trường:
SET STATISTICS IO ON
SET STATISTICS TIME ON
Chúng sẽ cung cấp cho bạn thông tin chi tiết về các lần đọc trang từ đĩa (trên mỗi đối tượng), đọc trang logic, thời gian biên soạn kế hoạch và thời gian thực hiện truy vấn.