3 Aralık 2007 Pazartesi

iyi scripter 'ın tipik davranışları ....

Çalışır Script Yazma Teknikleri


SQL ve diğer tüm script temelli dillerin ayırıcı özellikleri netdir.

  • Program yazmak çok kolaydır
  • Kolayca sonuç alabilirsiniz.
  • Hata yapmak çok kolaydır.
  • Hataları görmek zordur.

Genelde sorunlar zamanla ortaya çıkar. İki ay sorunsuz çalışan bir sorgu, çok doğal olarak bir gün yanlış sonuç üretebilir.


Basit kurallara, kesinlikle uyarak doğru çalışan scriptler elde edebilirsiniz.
Bir script'in doğru sonuçlar verdiğini görmeniz , doğru yazılmış olmasını gerektirmez.



MS SQL temelli olarak bazı kurallarımı anlatıyorum.


Kodunuz okunaklı olsun.
Büyük harf kullanın.
Kolon isimleri açıklayıcı olsun.

En temel sorgu kalıplarını aşağıda yazdım. Bunlar gibi yazmaya çalışın.

SELECT ....
FROM ...
WHERE ....


SELECT ,
FROM
WHERE
GROUP BY
HAVING BY


UPDATE
SET
WHERE




UPDATE
SET <>
FROM () X
WHERE <>


JOIN'leri test edin

JOINLERI kağıt üzerinde yazarak kontrol edin.

İki tabloyu join yaptığınız zaman, hedefin kaç tane olması gerektiğini kontrol edin.
Bu basit kuralı unutmayın ve atlamayın.



GROUP BY kullanırken bir kaç yardımcı fact ekleyiniz.
Ben genelde kullanmasamda aşağıdakine benzer factleri standart olarak ekliyorum.

COUNT(*) ADET
COUNT(DISTINCT SOURCECODE) NOKTA_ADET
COUNT(DISTINCT PERIOD) DONEM_ADET


Only for dummies

SELECT *
FROM

şeklinde bir sorgu kullanmayınız. (lütfen)


eğer içeriğini görmek istiyorsanız
SELECT TOP 100 *
FROM

Daha sonra

Gerekli filtreler ile sorgu yazınız.



Optimizer iyidir.
MS-SQL çok iyi çalışan bir optimizer 'a sahiptir. Aman dikkat edin, yanlış sonuç alabilirsiniz. :)










SELECT *
INTO TEMP1
FROM OZGUR



SELECT *
INTO TEMP2
FROM TEMP1



Sorguları birleşik çalıştırılrısa herzaman TEMP1=TEMP2 olmaz.

Optimizer sub query’leri bağımsız sorgu olarak çalıştırır.



SELECT a.*, b.*
FROM (select * from temp1) a, (select * from temp2) b
Where ….



Sorgusu şu şekilde çalışır.



SELECT *
INTO A
FROM TEMP1



SELECT *
INTO B
FROM TEMP2


SELECT A.*, B.*
FROM A, B
WHERE …




Koşulları dikkatli koyunuz.

Genel olarak bir sorgu setinin genişliği ne kadar az (küçük) ise o kadar hızlı çalışır. Gerçek dünyada sunucu üzerinde sorgu yazmıyoruz. Kendi odalarımızda, bakır kablolar üzerine kurulu bir ağı kullanıyoruz.

Bu sub-query'ler içinde özellikle geçerlidir.




SELECT ...
FROM ( ) A, () B
WHERE

şeklindeki bir sorguyu elinizden geldğince

SELECT ....
FROM ( SELECT .. FROM .. WHERE <> ) A, ( SELECT .. FROM .. WHERE <> ) B
WHERE <>

şeklinde yazınız.


Koşullarda kısaltma, azaltma yapmayınız. Bırakın sunucu sizin yerinize optimize etsin
Bu yanlışlarınızıda azaltacak ve sizi daha basit düşünmenizi sağlayacaktır.






Açıklamalar koymaktan çekinmeyiniz.

COMMENT yazma tekniklerini öğreniniz ve kullanınız.



JOIN kullanın


Kötü kodlamaların ortak yanı IN kullanımıdır. IN kullanmak yerine JOIN ile çözmeye çalışın.



Koşullarınız basit ve uyumlu olsun.

SOURCE table -> PERIOD column as varchar
ANSWER table -> PERIOD column as INT

SELECT
FROM SOURCE SRC, ANSWER ANSW
WHERE SRC.PERIOD=ANSW.PERIOD

ne yazık ki bir hata vermez ve genelde doğru sonuç verir.

Bunu kullanmayın.


SELECT
FROM SOURCE SRC, ANSWER ANSW
WHERE SRC.PERIOD=CAST(ANSW.PERIOD as varchar)


daha iyidir, ama bunu da kullanmayın.

İşin doğrusu tablo tasarımlarınızda bunu çözmenizdir.

Yapamadığınız durumlarda


SELECT
FROM SOURCE SRC, ( select ..., cast(PERIOD AS VARCHAR) FROM ANSWER) ANSW
WHERE SRC.PERIOD=ANSW.PERIOD

şeklinde kullanınız



Kopyalar yaratmayın

Sorgu setlerinden kopya yaratarak kodunuzu büyütmeyin.
Qlibx kullanabilirsiniz :)
Akullı join teknikleri genelde işinizi çözecektir.



Ölçüsüz büyümeyin
Bir sorgu seti yazdınız. Doğru, testler olumlu ..
Yaptığı işi %10 arttırmak için kodu %50 büyütmeniz gerekiyor ise YAPMAYINIZ.
Bir yerlerde yanlış vardır .

Hiç yorum yok: