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 olan
Sorgu 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/3
Sorgu 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)