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ı
-
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.
-
Değerleri Ekleyin:
proc_code_xref
fonksiyonunu 100 kez çağırarak sonuçları doğrudan yeni oluşturduğunuz XRef tablosuna ekleyebilirsiniz. -
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.