T-SQL sorgu performansı için basit tavsiyeler

1. SELECT sorgularınızda * asteriks yerine alan adlarını kullanın.

SELECT * FROM MyTable; ---Uzak durulmalı.
SELECT ID, Description, DateModified FROM MyTable; --- Daha sağlık bir kullanım şekli.

2. INSERT komutlarımızda da bir önceki kurallımız gibi alan adları kullanılmalı.

INSERT INTO MyTable VALUES ('A','B','C'); --- SAğlıksız bir kullanım.

3. SELECT sorgularınızın daha hızlı döndürmesi için LIKE kullanımında daha dikkatli olmalısınız.

SELECT Distinct LastName 
	FROM Person.Contact
		WHERE LastName LIKE '%sen'; --- En sık yapılan % karekteri ile sorgu koşullarının kullanımıdır.

SELECT Distinct LastName FROM Person.Contact WHERE LastName LIKE ‘___sen’; — Ancak koşul yazarken % kullanmadan önce _ kullanımına öncelik verilmelidir.

% kullanımında tüm karekterleri temsil eder, _ ise sadece tek karekter temsil eder. _ yi kullanmak için kaydın uzunluğu bilinmelidir aksi halde % kullanılmalıdır.

SELECT Distinct LastName 
	FROM Person.Contact
		WHERE LastName LIKE 'A%sen'; --- Başlangıç karakteri gibi bir kullanımda sorguyu hızlandırır.

SELECT Distinct LastName FROM Person.Contact WHERE LastName LIKE ‘[A-M]%sen’; — Başlangış karakteri için bir dizi aralığı da verilebilir.

4. DISTINCT kullanımı eğer gerçekten gerekli ise kullanılmalı.

5. UNION kullanımı da gereksiz veya alternatifsiz ise tercih edilmelidir. Eğer tekrar eden kayıtlar sorun olmayacaksa UNION ALL şeklindeki bir kullanım tekrar sorgular ile uğraşıp tekrar eden kayıtları silmeye uğraşmayacağında daha performanslı çalışacaktır.

6. JOIN ile tabloların ilişkilendirilerek sorgu yazılması. WHERE IN kullanımı yerine.

 

MS-SQL kullanıcılara tablo bazlı yetki verilmesi

DENY SELECT, INSERT, UPDATE, DELETE ON IASTABLE TO ms, f

veya kullanıcı sayısı çok fazla ise bu yeki tanımlama işlemi bir rol e verilebilir.

Kullanıcıları silip yeniden eklerken recovery kaynaklı hatalarda kullanıcı silinemiyor:

SELECT s.name
FROM sys.schemas s
WHERE s.principal_id = USER_ID(‘f’)

ALTER AUTHORIZATION ON SCHEMA::db_datareader TO dbo

shema ya bakıp düzeltilmesi gerekiyor silmek için.

yetikelri sınamak içine tek oturumda test yapabilirsiniz:

EXECUTE AS LOGIN = ‘ms’;
SELECT * FROM IASTABLE
EXECUTE AS LOGIN = ‘f’;
SELECT * FROM IASTABLE

MS SQL kayıtlardaki null char(0) ları silmek

ascii tablosu

Select sonucu dönen bir kolonda ascii 0 yani null var ise ve bunu değiştirmek istiyorsak char , replace fonksiyonları kullanılır.

SELECT TOP 10 SARJKODU,len(sarjkodu) a
,REPLACE(ltrim(rtrim(SARJKODU)) COLLATE Latin1_General_100_BIN, CHAR(0), '') as x
,len(REPLACE(ltrim(rtrim(SARJKODU)) COLLATE Latin1_General_100_BIN, CHAR(0), '')) as y
from [FORMA_URETIM].[dbo].[Table1]
WITH (NOLOCK)
where 
ISNUMERIC(REPLACE(ltrim(rtrim(SARJKODU)) COLLATE Latin1_General_100_BIN, CHAR(0), ''))=1
ORDER BY QUOTENAME(sarjkodu)
SARJKODU a x y
111003 18 111003 6
111002 18 111002 6
111002 18 111002 6
111002 18 111002 6
 18 111 3
 18 111 3
 18 111 3
 19 111 3
111006 18 111006 6
111010 18 111010 6