Menyetel kueri dengan beberapa gabungan


8

Saya punya pertanyaan ini .. 214 Eksekusi / min, 44,42 CPU Rata-rata (ms) apakah ada cara untuk membuatnya lebih cepat

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'

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Sekarang ini jika saya bagi 2 pertanyaan

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;

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

menggunakan kueri yang direkomendasikan oleh Frisbee

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Menggunakan Hash bergabung

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini


Berapa lama waktu yang dibutuhkan untuk menjalankan kueri? Dan mengapa itu dieksekusi 200 kali per menit? Bisakah Anda menjelaskan perlunya menyimpan hasil ke tabel temp begitu sering?
ypercubeᵀᴹ

kueri ini dalam SP dan tabel temp digunakan di kueri berikutnya. produksi ini memiliki sekitar 20 K permintaan per menit.
sebeid

Jawaban:


2

Cobalah ini.
Anda memiliki beberapa (kemungkinan) kondisi bergabung yang salah tempat

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'

Jika #temp memiliki indeks, lalu urutkan yang paling masuk akal

Jika itu tidak meningkatkan respons maka paksa saja hash bergabung di semua.
Masih gunakan pilih dalam jawaban saya - tambahkan HASH ke permintaan di atas

INNER HASH JOIN

saya mencoba pertanyaan Anda tetapi tidak ada banyak peningkatan. juga saya tahu tidak disarankan untuk menggunakan INNER Hash Join di Production. Juga saya tidak mendapatkan apa yang Anda maksud dengan "Masih menggunakan pilih dalam jawaban saya"
sebeid

Tidak banyak perbaikan - apakah itu hal yang buruk? Tidak direkomendasikan untuk menggunakan INNER Hash Join in Production? Di mana Anda mendengar itu? Mengapa Anda tidak mencobanya untuk menyeringai?
paparazzo

menambahkan rencana eksekusi ke .. permintaan ini paling banyak memakan CPU dan IO pada produksi. berdasarkan jumlah saya mendapatkan durasi yang lebih tinggi dan lebih banyak menulis dan cpu
sebeid yang

stackoverflow.com/questions/800124/… .. tetapi saya akan mencobanya dan memberi tahu Anda. terima kasih
sebeid

AF.Id = 6286 bukan kode sulit dalam kueri, itu adalah parameter yang diteruskan ke SP .. saya hanya menggunakan nomor ini untuk pengujian
sebeid

1

Coba buat indeks berikut (dengan asumsi itu belum ada)

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

ada Indeks Non Clustered pada akademik Institusi dan Indeks Clustred pada ID ..
sebeid

Khususnya apakah ada menyertakan (nama) pada indeks pada akademikInstitusiid?
Kenneth Fisher

ya nama sudah termasuk juga .. tidak masalah apakah itu 1 indeks atau 2 indeks
sebeid

1
Maksud Anda, Anda memiliki indeks berkerumun pada id dan yang kedua pada akademikInstitusiId sertakan (nama)? Saya akan pergi ke depan dan membuat indeks komposit. Jika Anda melihat rencana Anda sebagian besar dari mereka melakukan pencarian indeks berkerumun. Idenya adalah untuk mencoba menjadikannya pencarian indeks.
Kenneth Fisher

0

Sebelum melakukan perubahan apa pun pada skrip, cukup lakukan rebuid indeks pada semua tabel yang terlibat dan lihat apakah ada peningkatan yang signifikan. (setidaknya, lakukan statistik tingkat tabel dibangun kembali dengan pemindaian penuh)

[Program] sepertinya tabel besar, pastikan P.AssociationOrgId diindeks.


saya membangun kembali statistik setiap hari dan semua indeks dibangun kembali
sebeid
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.