Sorgu Yazarken Dikkat Edilmesi Gereken Hususlar
- Veritabanı nesneleri, tam bir açıklıkla ifade edilmelidir.FROM [BS112INTERFACEDB].[call].[CallAgent]?
- SELECT ifadelerinde * kullanılmamalıdır. Kolonlar belirtilmelidir.
 
- Tüm sorgular (SELECT,INSERT,UPDATE,DELETE), parametrik şekilde tasarlanmalıdır.
 Sorgu içinde, “Değer” gönderilmemelidir. Değerler, parametre olarak gönderilmelidir.
 
- Direkt olarak tablo üzerinden bilgi alınmaya çalışılmalıdır. “View” kullanımına dikkat edilmelidir.
 “View” nesnesinin bulunması için, ilave işlemler yapılmaktadır.
 http://www.sql-server-performance.com/2007/views-general/
 Duruma göre, “IndexedView” tercih edilebilir.
 http://www.techrepublic.com/article/see-performance-gains-by-using-indexed-views-in-sql-server/6160148
- View ‘ler üzerinden join kesinlikle yapılmamalıdır. Çünkü view’ler  sanal tablodur. Bu yüzden join işlemi esnasında index kullanılmaz.
 
- “NOT IN” kullanılmamalıdır.
 Aşağıdaki yapıların hepsi, daha iyi bir performans sunar.- EXISTS veya NOT EXISTS
- IN
- LEFT OUTER JOIN ve “NULL” koşulunun kontrol edilmesi
 
- LIKE kullanımında, baş tarafta karakter olmasına dikkat edilmelidir.
 Örnek : LIKE 'm%' şeklinde yazılmalıdır. (LIKE ‘%m’ kullanılamamalıdır.) Yoksa ilgili kolon için sorgu çekilmesi esnasında index kullanılmaz.
 
- Where ifadelerinde, kolon üzerinde fonksiyon kullanılmamalıdır.SELECT * FROM Orders WHERE LEFT(CustomerID,1) ='V' ---Yanlış olan SELECT * FROM Orders WHERE CustomerID LIKE 'V%' --- Doğru olanSorgu performansı için : http://sqlservercode.blogspot.com/2005/12/sql-query-optimizations.html 
- Where ifadelerinde, kolon üzerinde aritmetik işlem yapılmamalıdır.SELECT * FROM Orders WHERE OrderID*3 = 33000 SELECT * FROM Orders WHERE OrderID = 33000/3Sorgu performansı için : http://sqlservercode.blogspot.com/2005/12/sql-query-optimizations.html 
- Where ifadelerinde, Tarih kolonu üzerinde Dönüştürme yapılmamalıdır.SELECT * FROM Orders WHERE OrderDate = '1996-07-04' SELECT * FROM Orders WHERE CONVERT(CHAR(10),OrderDate,120) = '1996-07-04'?Sorgu performansı için : http://sqlservercode.blogspot.com/2005/12/sql-query-optimizations.html 
- Select ifadesinde kullanılacak tüm alanların indeks (Non-Clustured) içinde olması performansı arttırır. (Covering Index) (Az sayıda alan işlem üzerinde işlem yapan sorgularda, düşünülebilir.) - Bütün işlemler, İndeks üzerinde halledilecektir. Tabloya gitmeye gerek kalmayacaktır. - SELECT ORDER_DATE, SUM(AMOUNT) FROM ORDERS GROUP BY ORDER_DATE - (ORDER_DATE, AMOUNT) kolonları üzerinde indeks oluşturulmalıdır. 
- WHERE ifadesinde kullanılan operatörlerin performana göre sıralanışı aşağıdaki gibidir : 
 = (En hızlı)
 >, >=, <, <=
 LIKE
 <> (En yavaş)
 “=” kullanılamalı münkün olduğu kadar. Mümkün değilse “<>” yazılmalıdır.- http://www.sql-server-performance.com/2007/t-sql-where/ 
 

 
 
Kommentare (0)