2016-04-05 18 views
-1

MsSQL sorgu, 2 büyük sorgularıyla ile 3k + satırlarHız yukarıya Ben çok büyük bir veritabanına sahip

Bu sayfayı yüklemek için 4 tam saniye sürer, bunu hızlandırmak için nasıl?

İlk:

SELECT Description 
FROM ComputerIdentity JOIN 
    MakeModelIdentity 
    ON ComputerIdentity.MakeModelID = MakeModelIdentity.ID 
WHERE MakeModelIdentity.DeviceName='Laptop' AND 
     ComputerIdentity.Description LIKE '%uitleen%' AND 
     MakeModelIdentity.DeviceName = 'Laptop' AND 
     MakeModelIdentity.Model = 'Chromebook' 
ORDER BY ComputerIdentity.ID ASC 

İkincisi:

SELECT Inlognaam,VolledigeNaam FROM PersoneelEnLeerlingen 
+5

(1) 3k satır büyük değildir. (2) En çok hangi sorguyu aldığını ve buna odaklanacağını belirleyin. (3) Tablolarınızın indeksleri olup olmadığı hakkında bilgi verin. –

+0

EXPLAIN kullanarak hangi tablo alanının zaman aldığını bulmaya çalışın ve daha sonra zaman alan sütunlara INDEXING uygulayın. – RJParikh

+0

Ayrıca '' ComputerIdentity.Description LIKE ''% uitleen% ''içindeki' '' '' lk'den kurtulabilirsiniz, bu iyi olurdu. –

cevap

0

3K satırları minik, SQL Server Engine'in optimize etmek için yardımınıza ihtiyacı yoktur. Hala burada optimizasyon kitabından bazı öneriler var. İlk için :

SELECT ci.Description 
FROM ComputerIdentity ci JOIN 
    MakeModelIdentity mmi 
    ON ci.MakeModelID = mmi.ID 
WHERE mmi.DeviceName = 'Laptop' AND 
     mmi.Model = 'Chromebook' AND 
     ci.Description LIKE '%uitleen%' --reordered 
ORDER BY ci.ID ASC; 
  1. kimliklerinizi
  2. bunları birincil anahtar yapabilir durumda, ComputerIdentity.MakeModelID ve MakeModelIdentity.ID üzerinde endeksleri kümelenmiş Oluştur tamsayı olduğundan emin olun, en iyisi bu olur . Tanım, Aygıt Adı ve Modeli
  3. 'da kümelenmemiş bir dizin oluşturun. '%' Işlecini kaldırabilirsiniz. Bunu deneyin. Ön yüzde '%' operatörü çok maliyetlidir, yani '% uitleen%', 'uitleen%' den daha yavaştır. Eğer operatör gibi kaldırabilirseniz, bu harika olurdu.
  4. İkinci İçin

: kümelenmiş bir dizin yok ki sen, seçiyoruz sütunlarda kümelenmemiş dizin oluşturma

+0

Cihazların isimleri ICT Uitleen *** olduğu için% operatörünü kaldıramıyorum - ama ICT Uitleen'i deneyebilirim% – Koen

+0

Lütfen bunu yapın, sanki dizgenin başladığı alfabeyi biliyorsa, kural dışıdır. diğer tüm dizeler. Tüm kelimeleri aramak yerine, örneğin, u ile başlayan sözcükleri aramada hız kazanın. –

0

Bu sorgu için (ben gereksiz WHERE koşul masa takma ad kullanımı ve kaldırılmasıyla "basitleştirilmiş" ettik):

SELECT ci.Description 
FROM ComputerIdentity ci JOIN 
    MakeModelIdentity mmi 
    ON ci.MakeModelID = mmi.ID 
WHERE mmi.DeviceName = 'Laptop' AND 
     ci.Description LIKE '%uitleen%' AND 
     mmi.Model = 'Chromebook' 
ORDER BY ci.ID ASC; 

Sorguyu MakeModelIdentity(DeviceName, Model, ID) vedizinlerindeki dizinlerle hızlandırabilirsiniz.

İkinci sorgu gerçekten basittir ve hız yalnızca verinin boyutuna bağlıdır.

+0

İndeksleri nasıl seçtiğimi anlamanıza yardımcı olabilir misiniz? –

İlgili konular