Hãy xem xét ba truy vấn:Tại sao hiệu suất bị suy giảm khi sử dụng trường không được lập chỉ mục trong mệnh đề SELECT?
select sampleno from sample
where markupdate > '1/1/2010'
select sampleno, markupdate from sample
where markupdate > '1/1/2010'
select sampleno, markuptime from sample
where markupdate > '1/1/2010'
sampleno
và markupdate
lĩnh vực được lập chỉ mục (sampleno
là chìa khóa chính)
markuptime
không được lập chỉ mục
Queries 1 và 2 mất khoảng 1 giây để chạy (trả về hàng 237K). Truy vấn 3 vẫn chạy sau 3 phút.
Tại sao việc bao gồm trường không được lập chỉ mục trong mệnh đề SELECT gây ra sự xuống cấp hiệu suất như vậy?
Đây là cơ sở dữ liệu SQL 6.5.
Tôi có thể làm gì để truy vấn tạm thời bao gồm thời gian đánh dấu trong chỉ mục hay tôi phải tạo chỉ mục cho bảng bao gồm thời gian đánh dấu? – blueshift
Bạn có thể thêm INCLUDE để bao gồm Đánh dấu thời gian vào chỉ mục không được nhóm của bạn trên MarkUpdate, điều này sẽ cung cấp cho bạn "chỉ mục bao gồm" cho truy vấn thứ ba. (Nevermind, bạn có thể làm điều này nếu bạn có một phiên bản mới hơn của SQL ... Tôi đoán chỉ cần thêm MarkupTime làm cột khác vào chỉ mục MarkUpdate của bạn.) –