Tại sao nhiều người đọc logic?


7

Tôi có một truy vấn rất đơn giản được hiển thị trong Trình giám sát hoạt động và các số liệu thống kê khác có số lần đọc logic nhất trên toàn bộ máy chủ DB của tôi.

SELECT MAX(RESULT_DATE) FROM TABLEX mm WITH (NOLOCK) 
JOIN TABLEX_RESULTS mr WITH (NOLOCK) on mr.ID = mm.ID 
WHERE DAYS IS NOT NULL AND mm.ORDER_ID = 12345

TABLEX có khoảng 28 triệu hàng

TABLEX_RESULTS có khoảng 6 triệu hàng

Tôi có thể làm gì ở đây để giảm số lần đọc logic trên truy vấn này? Tôi hơi bối rối về cách một truy vấn đơn giản như vậy có thể có số lượng lớn các lần đọc logic như vậy.

Cảm ơn

Định nghĩa chỉ mục (từ bình luận)

tableX 
IndexName                    PK     Type    Key1            Key2
IDX_MP_MEDS                  0      B AA    ORDER_ID        MEDPASS_DATE
IDX_MP_MEDS_ID_AND_ORDER_ID  0      B A     MEDPASS_DATE    
IX_MP_MEDS_ROOT_ORDER_ID     0      B DA    ROOT_ORDER_ID   MEDPASS_DATE
PK_MP_MED PK                 1      C A     MEDPASS_MEDS_ID 

tablex_resulsts

4
Các chỉ báo trên các bảng là gì và trình lược tả cho biết các bảng và chỉ mục đang được quét như thế nào
user151019

Trong bảng nào là DAYScột? Còn RESULT_DATEai?
ypercubeᵀᴹ

Câu trả lời:


10

Đó là những trang đọc, nhớ bạn. Điều đó có liên quan.

Khả năng:

  • Lập chỉ mục không đúng hoặc không đủ. Có bất kỳ trường được lọc nào được lập chỉ mục? Các chỉ số rộng bao nhiêu (xem bên dưới)?
  • Mật độ trang kém. Yếu tố điền của bạn vào bất kỳ chỉ mục nào bạn có thể có? Nếu nó quá thấp, bạn sẽ lấy rất nhiều trang cho việc này.
  • Chỉ số rất rộng. Nếu bạn có các chỉ mục nhưng chúng có rất nhiều trường hoặc các trường rất rộng, thì bạn sẽ nhận được ít hàng hơn trên mỗi trang.

Tôi đoán rằng bạn có một bảng quét hoặc quét chỉ mục cụm xảy ra cho ít nhất một trong những tiêu chí này và bảng rộng là nguyên nhân khiến nhiều dữ liệu được đọc, bất kể bạn thực sự cần bao nhiêu dữ liệu.


Bạn có thể làm gì về chỉ số rộng? Chỉ cần loại bỏ chúng? Tôi thường không thêm bất kỳ chỉ mục nào mà máy chủ SQL không yêu cầu.
Omikron Theta

không bao giờ tôi không thể định dạng chính xác truy vấn chỉ mục của mình để đăng ở đây, tôi không nghĩ rằng tôi thiếu bất kỳ chỉ mục nào. Máy chủ SQL sẽ không là chỉ mục gợi ý nếu tôi là? Ngoài ra, bản thân truy vấn chạy cực nhanh, chưa đến 1 giây, vậy tôi còn thiếu điều gì?
Omikron Theta

6

Bởi vì bạn không có chỉ số thích hợp. Quan trọng nhất là bạn sẽ cần một chỉ mục trên TABLEX (ORDER_ID)và một chỉ mục trên TABLEX_RESULTS (ID). Tốt nhất là chỉ số trên ORDER_IDnên bao gồm (DAYS, ID, RESULT_DATE).

Bạn có một chỉ mục trên ORDER_ID, nhưng không bao gồm . Đối với tables_results, bạn không có bất kỳ chỉ mục nào, hoặc bình luận của bạn không bao gồm chúng.


3

Có một số lượng lớn các lần đọc vì SQL Server đang quét bảng để thực hiện truy vấn của bạn, yêu cầu đọc mọi hàng.

Bạn có thể giảm số lần đọc bằng cách tạo các chỉ mục hẹp chỉ chứa các cột cần thiết cho truy vấn.

Bạn cũng có thể xem xét lưu trữ kết quả của truy vấn, để có thể tránh phải chạy nó nhiều lần hơn mà bạn thực sự cần. Bạn có thể lưu trữ trong bộ nhớ hoặc có thể trong một bảng nhỏ.

Một tùy chọn khác là định kỳ di chuyển dữ liệu của bạn vào khối Dịch vụ phân tích và sử dụng ADOMD.NET và MDX để truy vấn nó - sẽ nhanh hơn nhiều so với chạy các truy vấn loại tổng hợp lớn trong công cụ quan hệ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.