Điều chỉnh truy vấn với nhiều liên kết


8

Tôi có truy vấn này .. 214 Thực thi / phút, CPU trung bình 44,42 (ms) có cách để làm cho nó nhanh hơn nhiều

SELECT        P.Id id0,
              P.ProgramId ProgramId1,
              P.ProgramName ProgramName2,
              P.ProgramLevel ProgramLevel3,
              P.Department Department4,
              P.Track Track5,
              P.AcademicYear AcademicYear6,
              P.StartTerm StartTerm7,
              P.Delivery Delivery8,
              P.Fee Fee9,
              P.City City10,
              P.STATE State11,
              P.StartDate StartDate12,
              P.Deadline Deadline13,
              P.DeadlineDisplay DeadlineDisplay14,
              P.ProgramType ProgramType15,
              O.Id as OrganizationId16,
              O.NAME OrganizationName17,
              P.ApplicationType ApplicationType18,
              P.Concentration Concentration19,
              P.ZipCode ZipCode20,
              P.Campus Campus21,
              P.WADisplayName WADisplayName22,
              P.UpdatedDate updateDate23,
              AF.Id InstanceId24,
              RD.Id stateId33
INTO #TempGetFullProgramSelectionInfo            
FROM    unicas_config..applicationForm AF  
  INNER JOIN UNICAS_CONFIG.. AcademicInstitution AI
           ON AF.casid=AI.casid 
  INNER JOIN UNICAS_CONFIG..Organization O 
           ON O.academicInstitutionid=AI.id   
  INNER JOIN UNICAS_CONFIG..AssociationOrg asOrg
           ON asOrg.FormId=AF.id
  INNER JOIN  UNICAS_CONFIG..Program P
           ON P.AssociationOrgId=asOrg.Id and asOrg.OrganizationId=O.id AND AF.Id = 6286
  INNER JOIN  unicas_config..ReferenceData RD 
                 ON P.STATE = RD.ValueId AND RD.ValueAbbr ='US'
  INNER JOIN  unicas_config..ReferenceDataSet RS  
           ON RD.ReferenceSetId = RS.SetId AND RS.NAME = 'LK_States'

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Bây giờ điều này nếu tôi chia thành 2 truy vấn

select RD.ValueId, RD.id into #temp1
from   unicas_config..ReferenceData RD
INNER JOIN  unicas_config..ReferenceDataSet RS   ON RD.ReferenceSetId= RS.SetId AND RS.NAME= 'LK_States'
where RD.ValueAbbr='US';


SELECT        P.Id id0,
              P.ProgramId ProgramId1,
              P.ProgramName ProgramName2,
              P.ProgramLevel ProgramLevel3,
              P.Department Department4,
              P.Track Track5,
              P.AcademicYear AcademicYear6,
              P.StartTerm StartTerm7,
              P.Delivery Delivery8,
              P.Fee Fee9,
              P.City City10,
              P.STATE State11,
              P.StartDate StartDate12,
              P.Deadline Deadline13,
              P.DeadlineDisplay DeadlineDisplay14,
              P.ProgramType ProgramType15,
              O.Id as OrganizationId16,
              O.NAME OrganizationName17,
              P.ApplicationType ApplicationType18,
              P.Concentration Concentration19,
              P.ZipCode ZipCode20,
              P.Campus Campus21,
              P.WADisplayName WADisplayName22,
              P.UpdatedDate updateDate23,
              AF.Id InstanceId24,
              RD.Id stateId33
INTO #TempGetFullProgramSelectionInfo            
FROM    unicas_config..applicationForm AF  
  INNER JOIN UNICAS_CONFIG.. AcademicInstitution AI
           ON AF.casid=AI.casid 
  INNER JOIN UNICAS_CONFIG..Organization O 
           ON O.academicInstitutionid=AI.id   
  INNER JOIN UNICAS_CONFIG..AssociationOrg asOrg
           ON asOrg.FormId=AF.id
  INNER JOIN  UNICAS_CONFIG..Program P
           ON P.AssociationOrgId=asOrg.Id and asOrg.OrganizationId=O.id AND AF.Id = 6286
  INNER JOIN    #temp1 RD ON P.STATE= RD.ValueId;

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

sử dụng truy vấn được đề xuất bởi Frisbee

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Sử dụng Hash tham gia

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


Truy vấn cần bao nhiêu thời gian để chạy bây giờ? Và tại sao nó được thực hiện 200 lần mỗi phút? Bạn có thể giải thích sự cần thiết phải lưu kết quả vào bảng tạm thời không?
ypercubeᵀᴹ

truy vấn này nằm trong SP và bảng tạm thời được sử dụng trong truy vấn tiếp theo. sản xuất này có khoảng 20 K yêu cầu mỗi phút.
sebeid

Câu trả lời:


2

Hãy dùng thử
Bạn có một số điều kiện tham gia (có khả năng) bị đặt nhầm chỗ

SELECT        P.Id id0,
              P.ProgramId ProgramId1,
              P.ProgramName ProgramName2,
              P.ProgramLevel ProgramLevel3,
              P.Department Department4,
              P.Track Track5,
              P.AcademicYear AcademicYear6,
              P.StartTerm StartTerm7,
              P.Delivery Delivery8,
              P.Fee Fee9,
              P.City City10,
              P.STATE State11,
              P.StartDate StartDate12,
              P.Deadline Deadline13,
              P.DeadlineDisplay DeadlineDisplay14,
              P.ProgramType ProgramType15,
              O.Id as OrganizationId16,
              O.NAME OrganizationName17,
              P.ApplicationType ApplicationType18,
              P.Concentration Concentration19,
              P.ZipCode ZipCode20,
              P.Campus Campus21,
              P.WADisplayName WADisplayName22,
              P.UpdatedDate updateDate23,
              AF.Id InstanceId24,
              RD.Id stateId33
INTO #TempGetFullProgramSelectionInfo            
FROM       UNICAS_CONFIG..Organization O                 
INNER JOIN UNICAS_CONFIG..AcademicInstitution AI
            ON AI.id = O.academicInstitutionid        
INNER JOIN unicas_config..applicationForm AF
            ON AF.casid = AI.casid  
           AND AF.Id = 6286   
INNER JOIN UNICAS_CONFIG..AssociationOrg asOrg
            ON asOrg.FormId         = AF.id
           and asOrg.OrganizationId = O.id
INNER JOIN UNICAS_CONFIG..Program P
            ON P.AssociationOrgId = asOrg.Id 
INNER JOIN unicas_config..ReferenceData RD 
            ON RD.ValueId = P.STATE  
           AND RD.ValueAbbr ='US'
INNER JOIN unicas_config..ReferenceDataSet RS  
            ON RS.SetId = RD.ReferenceSetId   
           AND RS.NAME = 'LK_States'

Nếu #temp có các chỉ mục thì hãy sắp xếp theo thứ tự hợp lý nhất

Nếu điều đó không cải thiện phản hồi thì chỉ cần buộc tham gia băm trên tất cả
Vẫn sử dụng chọn trong câu trả lời của tôi - thêm HASH vào truy vấn ở trên

INNER HASH JOIN

tôi đã thử truy vấn của bạn nhưng không có nhiều cải thiện. Ngoài ra, tôi biết không nên sử dụng INNER Hash Tham gia sản xuất. Ngoài ra tôi đã không hiểu ý của bạn bằng cách "Vẫn sử dụng lựa chọn trong câu trả lời của tôi"
sebeid

Không có nhiều cải thiện - đó có phải là một điều xấu?. Không nên sử dụng INNER Hash Tham gia sản xuất? Nơi mà bạn đã nghe thấy không? Tại sao bạn không thử cười?
paparazzo

đã thêm kế hoạch thực hiện vào .. truy vấn này tiêu tốn nhiều CPU và IO nhất khi sản xuất. dựa trên số tôi đang nhận được thời lượng cao hơn và viết nhiều hơn và cùng cpu
sebeid

stackoverflow.com/questions/800124/ trên .. nhưng tôi sẽ dùng thử và cho bạn biết. cảm ơn
sebeid

AF.Id = 6286 không được mã hóa cứng trong truy vấn, nó là một tham số được truyền cho SP .. tôi chỉ sử dụng số này để thử nghiệm
sebeid

1

Hãy thử tạo chỉ mục sau (giả sử nó không tồn tại)

CREATE INDEX ix_Organization_academicInstitutionid
    ON Organization(academicInstitutionid, Id) INCLUDE (Name)

có một Chỉ số không phân cụm về học thuật và lập chỉ mục về ID ..
sebeid

Cụ thể có bao gồm (tên) trên chỉ mục về acadInstlationid không?
Kenneth Fisher

có tên cũng được bao gồm .. có vấn đề gì không nếu nó là 1 chỉ mục hoặc 2 chỉ mục
sebeid

1
Bạn có nghĩa là bạn có chỉ mục được nhóm trên id và chỉ số thứ hai về acadInstlationId bao gồm (tên)? Tôi sẽ tiếp tục và tạo chỉ số tổng hợp. Nếu bạn nhìn vào kế hoạch của bạn, hầu hết trong số họ đang thực hiện tìm kiếm chỉ mục cụm. Ý tưởng là cố gắng làm cho nó trở thành một chỉ số tìm kiếm thay thế.
Kenneth Fisher

0

Trước khi thực hiện bất kỳ thay đổi nào đối với tập lệnh, chỉ cần thực hiện một chỉ mục được xây dựng lại trên tất cả các bảng có liên quan và xem liệu có sự gia tăng đáng kể nào không. (ít nhất, thực hiện xây dựng lại thống kê cấp bảng với quét toàn bộ)

[Chương trình] có vẻ như một bảng lớn, đảm bảo P.AssociationOrgId được lập chỉ mục.


tôi xây dựng lại số liệu thống kê hàng ngày và tất cả các chỉ mục đã được xây dựng lại
sebeid
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.