Sybase’de Gözatıcı Kullanımından Kaçınmanın Yolları (T-SQL)

SQL’deki gözatıcılar, özellikle eski kodu güncellerken sıkça hayal kırıklığı kaynağı olabilir. Karmaşık ve verimsiz sorgulara yol açabilirler ve veri tabanı performansını yavaşlatabilirler. Bu blog yazısında, Sybase (T-SQL) sorgularınızda gözatıcı kullanımını etkili bir şekilde nasıl ortadan kaldırabileceğinizi keşfedeceğiz; bu sayede saklı prosedürleriniz daha verimli olur ve bakımı daha kolay hale gelir.

Gözatıcıların Sorunu

Bir varlık olarak eski bir Sybase kodunu güncellemeniz istendiğini hayal edin ve bir gözatıcı ile karşılaşırsınız. Bu gözatıcı, bir sonuç kümesini işlemek için kullanılıyor, ancak büyük veri setleriyle çalışırken çok verimli değil. Örneğin, işlenmesi gereken yaklaşık 500.000 satır ve 100 farklı değer içeren bir sonuç kümeniz olduğunu varsayalım. Böyle bir görev için bir gözatıcı kullanmak, performans sorunlarına ve gereğinden karmaşık bir koda yol açabilir.

Tipik Bir Gözatıcı Örneği

Açıklamak için, bir saklı prosedüre dayanarak geçici bir tabloyu güncellemek için bir gözatıcı kullanan örnek bir kod kesiti burada:

declare c_lookup_codes for 
select distinct lookup_code 
from #workinprogress

while(1=1) 
begin 
    fetch c_lookup_codes into @lookup_code 

    if @@sqlstatus<>0 
    begin 
        break 
    end 

    exec proc_code_xref @lookup_code @xref_code OUTPUT 

    update #workinprogress 
    set xref = @xref_code 
    where lookup_code = @lookup_code 
end

Bu kod çalışabilir, ancak en iyi örnek değildir. Gözatıcıyı tamamen kaldırmanın yollarını keşfedelim.

Çözüm: XRef Tablosu Kullanmak

Gözatıcıdan kaçınmak için etkili bir yaklaşım, bir çapraz referans (XRef) tablosu oluşturmaktır. Bunu yaparak, saklı prosedürden ihtiyaç duyduğunuz tüm gerekli değerlerle XRef tablosunu önceden doldurabilirsiniz.

Gözatıcıyı Ortadan Kaldırma Adımları

  1. XRef Tablosunu Oluşturun: Farklı arama değerlerinin statik olduğunu bildiğiniz için bu değerleri saklamak üzere bir XRef tablosu oluşturun.

  2. Değerleri Ekleyin: proc_code_xref fonksiyonunu 100 kez çağırarak sonuçları doğrudan yeni oluşturduğunuz XRef tablosuna ekleyebilirsiniz.

  3. Join Kullanarak Güncellemeleri Gerçekleştirin: Değerleri bir döngüde almak yerine, geçici tablonuzu güncellemek için bir join işlemi ile tek bir güncelleme ifadesi kullanabilirsiniz. Bu, karmaşıklığı büyük ölçüde azaltır ve performansı artırır.

Gözatıcı Olmadan Örnek Kod

Bu önerileri uyguladıktan sonra kodunuz şöyle görünebilir:

-- XRef tablosunu oluştur
CREATE TABLE XRef (lookup_code VARCHAR(50), xref_code VARCHAR(50))

-- XRef tablosunu doldur
INSERT INTO XRef (lookup_code, xref_code)
SELECT lookup_code, 
       exec proc_code_xref(lookup_code) 
FROM (SELECT DISTINCT lookup_code FROM #workinprogress) AS DistinctValues

-- join kullanarak #workinprogress tablosunu güncelle
UPDATE wp
SET wp.xref = xr.xref_code
FROM #workinprogress wp
JOIN XRef xr ON wp.lookup_code = xr.lookup_code

Bu Yaklaşımın Ana Faydaları

  • Geliştirilmiş Performans: Gözatıcıyı ortadan kaldırmak, veri tabanı motorunun işlemleri daha etkili bir şekilde optimize etmesini sağlar.
  • Basitleştirilmiş Kod: Tek bir güncelleme ifadesi kullanmak, mantığı okumayı ve bakımını kolaylaştırır.
  • Ölçeklenebilirlik: Bu yaklaşım, farklı arama kodlarının sayısı değişirse kolayca değiştirilebilir.

Sonuç

Gözatıcıları ortadan kaldırarak ve çapraz referans tablosu kullanarak, Sybase T-SQL kodunuzun performansını ve bakımını iyileştirebilirsiniz. Veri tabanı dünyasında, her bir optimizasyon önemli, özellikle büyük veri setleriyle çalışırken. SQL’iniz ne kadar temiz ve basitse, o kadar iyi performans gösterir.

Son Düşünceler

Kodunuzda gözatıcılarla sık sık karşılaşıyorsanız, bu gibi alternatif stratejileri keşfetmeyi düşünün. Doğru yaklaşım ile, veri tabanı sorgularınızın verimli olmasını sağlayabilirken Kodunuzun netliğini kaybetmezsiniz.