Bunun eski bir gönderi olduğunu biliyorum ama bence bu çok önemli bir konu, özellikle 10 milyondan fazla kayıtlara sahip olduğumuz ve terabaytlarca veriden bahsettiğimiz günümüzde.
Aşağıdaki gözlemlere de ağırlık vereceğim. Tablomda yaklaşık 45 milyon kaydım ([veriler]) ve [kediler] tablomda yaklaşık 300 kaydım var. Bahsetmek üzere olduğum tüm sorgular için kapsamlı indekslemem var.
Örnek 1'i düşünün:
UPDATE d set category = c.categoryname
FROM [data] d
JOIN [cats] c on c.id = d.catid
Örnek 2'ye kıyasla:
UPDATE d set category = (SELECT TOP(1) c.categoryname FROM [cats] c where c.id = d.catid)
FROM [data] d
Örnek 1'in çalışması yaklaşık 23 dakika sürdü. Örnek 2 yaklaşık 5 dakika sürdü.
Dolayısıyla, bu durumda alt sorgunun çok daha hızlı olduğu sonucuna varabilirim. Tabii ki, 1GB / sn'de i / o kapasitesine sahip M.2 SSD sürücüleri kullandığımı (yani baytlar bit değil) kullandığımı unutmayın, bu nedenle indekslerim de gerçekten hızlı. Bu, sizin durumunuzda hızları da etkileyebilir
Bir kereye mahsus bir veri temizliği ise, muhtemelen en iyisi onu çalıştırıp bitirmek. TOP (10000) kullanıyorum ve büyük sorguya ulaşmadan önce ne kadar sürdüğünü görüyorum ve kayıt sayısıyla çarpıyorum.
Üretim veritabanlarını optimize ediyorsanız, verilerin önceden işlenmesini, yani gerçek zamanlı erişimin statik verileri alması için kayıtları eşzamansız olarak güncellemek için tetikleyicileri veya iş komisyoncusu kullanmanızı şiddetle tavsiye ederim.