Yavaş SQL sorgusu okuduktan sonra , nasıl optimize edeceğinizden emin değilim , sorguların genel performansını düşünmemi sağladı . Şüphesiz, sorgularımızı biraz daha hızlı hale getirmek için ilk tablonun sonuçlarının (diğer tablolar birleştirildiğinde) katılmadan önce (bu soru için iç birleşimler) olabildiğince küçük olması gerekir.
Örnek:
SELECT *
FROM ( SELECT * FROM table1 WHERE col = @val ) t
INNER JOIN table2 ON col = col2
Şundan daha iyi / daha hızlı olun:
SELECT *
FROM table1
INNER JOIN table2 ON col = col2
WHERE table1.col = @val
Benim teorim aşağıdaki gibidir (bu doğru uygulama olmayabilir, okuduğum bir SQL Server 2008 iç kitabından hatırlamaya çalışıyorum (MSFT Press)):
- Sorgu işlemcisi önce sol tabloyu alır (tablo1)
- İkinci tabloya (tablo2) katılır ve gerekli satırları filtrelemeden önce (varsa) kartezyen bir ürün oluşturur
- Sonra SEELCT deyimiyle en son WHERE, ORDER BY, GROUP BY, HAVING yan tümcelerini gerçekleştirir.
Yukarıdaki # 1 ifadesinde tablo daha küçükse, SQL motorunun kartezyen ürünleri oluştururken daha az işi vardır. Daha sonra where deyimine ulaştığınızda, bellekten filtrelemek için daha düşük bir sonuç kümeniz olur.
Şu ana kadar gerçek dışı olabilirim. Dediğim gibi, bu bir teori.
Senin düşüncelerin?
Not : Sadece bu soruyu düşündüm ve henüz kendi testlerimi yapma şansım olmadı.
Not 2 : MySql vb. Uygulaması hakkında hiçbir şey bilmediğim için SQL Server olarak etiketlendi . Lütfen yine de cevaplamaktan / yorum yapmaktan çekinmeyin