SQL Server performansını ve veritabanınızı iyileştirmeye yönelik ipuçları 💡

Veritabanımızın hızlı aksiyon alması tüm DBA’lar için önemli bir olaydır. İyi bir veritabanı tasarımı, bir uygulamanın en iyi performansıyla sonuçlanan veri işleme sırasında en iyi performansı sağlar.

Veritabanı tasarımı ve veri işleme sırasında aşağıdaki kilit noktaları dikkate almalıyız:

1)Uygun Veri Türünü Seçin
Sorgu performansını artırmaya da yardımcı olduğundan, verilerinizi depolamak için uygun SQL Veri Türünü seçin.

Çoğu DBA, bir veri türünü diğerine karşı seçmenin artıları ve eksileri ile boğuşmuştur. Bazen karar vermek kolaydır, bazen ise karar vermek biraz daha zordur. Bugünün yazımızın başında, nasıl karar vereceğimizi değerlendirelim.

Veri türü ve uzunluğu, bir veritabanındaki verilere uygulanan en temel bütünlük kısıtlamalarıdır. DB’de yalnızca bir tablo oluşturulduğunda her sütun için veri türünü belirterek, o sütunda yalnızca doğru veri türünün depolanmasını otomatik olarak sağlar. Verileri uygun olmayan bir değere eklemeye veya güncellemeye çalışan işlemler reddedilecektir. Ayrıca, daha büyük değerlerin tabloda saklanmasını engellemek için sütuna bir maksimum uzunluk atanır.

DBA, her sütunun veri türünü ve uzunluğunu mantıklı bir şekilde seçmelidir. Tablolarınızdaki sütunlar için bir veri türü seçmenin genel kuralı, sütun için doğru değerlerin etki alanına en yakın veri türünü seçmektir. Bu, aşağıdaki kurallara uymaya çalışmanız gerektiği anlamına gelir:

Veri sayısal ise, SMALLINT, INTEGER, BIGINT ya da DECIMAL veri türlerini tercih edin. DECFLOAT ve FLOAT da çok büyük sayılar için seçeneklerdir.
Veri karakter ise, CHAR veya VARCHAR veri türlerini kullanın.
Veri tarih ve saat ise, DATE, TIME ve TIMESTAMP veri türlerini kullanın.
Veri multimedya ise, GRAPHIC, VARGRAPHIC, BLOB, CLOB veya DBCLOB veri türlerini kullanın.

2)nchar ve nvarchar’dan kaçının
Her iki veri türü de char ve varchar olarak yalnızca çift bellek kullandığından, nchar ve nvarchar veri türünden kaçınmaya çalışın. Hintçe, Çince karakterler vb. gibi Unicode (16 bit karakter) verilerini depolamanız gerektiğinde nchar ve nvarchar kullanın.

3)SELECT * ifadesinde kaçının

Çoğu zaman, performansın yavaşlamasına neden olan yalnızca sorgulardır. Sorgular başlı başına yanlış değildir, ancak fazladan kaynak tüketir veya yavaş çalışırlar. Bu, hem DBA’ların hem de geliştiricilerin bilmesi ve uygulaması gereken bir şeydir çünkü onları profesyonel yapan da budur.


SQL Server, sorgu yürütmeden önce SELECT * ifadesini kullanmaktan kaçının. Sorgu sonucunun ne kadar boyutta bir data geleceğini bilemeyebiliriz. Bu sebepten sistemi yavaşlatabilir. SELECT * ile tüm sütunları sorgulamak yerine, istediğiniz sütunların adını verin ve öyle sorgunuzu çalıştırın.

-- Kaçınmanız gereken sorgu tipi
SELECT * FROM tblName
-- Sorgu performansı için iyi örnek
SELECT col1,col2,col3 FROM tblName 

4) IN yerine EXISTS kullanın

EXISTS, IN’den daha hızlı olduğundan, IN yerine sorguyu kontrol etmek için EXISTS’i kullanma çalışın.

--  Kaçınmanız gereken sorgu tipi
SELECT Name,Price FROM tblProduct 
where ProductID IN (Select distinct ProductID from tblOrder)
-- Sorgu performansı için iyi örnek
SELECT Name,Price FROM tblProduct 
where ProductID EXISTS (Select distinct ProductID from tblOrder)

5) HAVING Kullanmaktan Kaçının

HAVING kullanmaktan kaçınmaya çalışın. Çünkü bir toplama sonucunu daha fazla filtrelemek istiyorsanız, Having gereklidir. HAVING başka bir amaç için kullanmayın.

6)Clustered ve NonClustered Index Oluşturma
Indexler verilere hızlı bir şekilde erişmeye yardımcı olduğundan clustered ve NonClustered index oluşturabilirsiniz. Ancak dikkatli olun, bir tablodaki daha fazla index EKLEME, GÜNCELLEME, SİLME işlemlerini yavaşlatır. Bu nedenle, bir tablodaki indexsayısını küçük tutmaya çalışın.

7)SQL nesneleri adından önce Şema adını kullanın
Şema adını SQL nesne adından önce ve ardından kullanarak sorgularınızı çekmeye çalışın. SQL Server’ın bu nesneyi belirli bir şemada bulmasına yardımcı olduğu için. Sonuç olarak, performans ı arttıracak bir sorgu çekme tipidir.

 --Sorgu performansını iyileştiren sorgu tipi
SELECT col1,col2 from dbo.tblName
-- Tavsiye edilmeyen sorgu tipi
SELECT col1,col2 from tblName 

8)Transactionları küçük tutun
Transaction loglar, tabloları verilerini yeri geldiğinde kilitlediğinden dolayı transaction işlemlerini mümkün olduğunca küçük tutmaya çalışın. Bazen uzun süre yapılan işlemler veritabanınızında kilitlenmelere neden olabilir.

10)SET NOCOUNT ON

SQL Server SELECT, INSERT, UPDATE ve DELETE deyiminden etkilenen bir dizi satır döndürdüğü için NOCOUNT ON ayarlaması yapın. NOCOUNT ON’u şu şekilde ayarlayarak bunu durdurabiliriz:

 CREATE PROCEDURE dbo.MyTestProc
AS
SET NOCOUNT ON
BEGIN
.
.
END 

11)Sık kullanılan veriler ve daha karmaşık sorgular için stored procedure kullanma
Verilere sık sık erişmek için gereken sorgu için bir sp oluşturabilirsiniz. Karmaşık sorguları çekerken sp kullanmak performans sorunlarınızı da giderir.

CREATE PROCEDURE procedure_name
AS
sql_statement
GO;

EXEC procedure_name;

Bu maddelerde SQL’de performansınızı iyileştirmeye yönelik önlemler almanızı gerektiren durumları anlatmaya çalıştım. Bu maddelere dikkat ederek sorgularınızı daha hızlı ve sağlıklı çalıştırabilirsiniz.

Bir sonraki makalede görüşmek üzere…

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir