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.
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:
Yorum Gönder