1

Konu: Foreign Key ve Index

Merhaba,
SQL Server da bir alanı relation yaparak bağladım kendisi foreign key oluşturdu. Bu alanla ilgili sıkça arama yapıyorum, bu alana index eklemem gerekir mi?, yoksa foreign key varken index vermeye gerek yok mudur?

/o---------------------o\
     www.haser.com
\o---------------------o/

2

Re: Foreign Key ve Index

Foreign key index yapmiyor otomatik bildigim kadariyla. Ben foreign key'ler icin index yaratiyorum. SQL server tuning wizardla bak istersen o gerekli indexleri soyluyor

3

Re: Foreign Key ve Index

Dediğini yaptım smile
SQL Server 2005 kullanıyorum. Burada bana bazı indeksler tavsiye etti ama ben bu indeks yapısını anlamadım smile
Include parametresi, with parametresi kullanılmış.  Acaba bu işin Türkçesi nedir?

/o---------------------o\
     www.haser.com
\o---------------------o/

4

Re: Foreign Key ve Index

Tarkan,
Include 2005'te yeni. Ben de sen soyleyince baktim, cok faydali birseymis, hosuma giiti. Tam aradigim sey, sagol sayende varligini ogrendim:) Dokumantasyondan kaptigimi kisaca kendi yorumumla satayim, ornek ise dogrudan oradan;)

Cok sayida yapilan querylerde where kisminda gecen indexte olursa hizli olacak. Eger select field1,field2, ... deki field listesindeki tum alanlar da indexte olsa dogrudan indexe baktiginda query'i karsilayacak ve diskte asil tabloya bakmasi bile gerekmeyecek:) Tabii o zaman ortaya index boyut limiti (900 bytes), indexe eklemenin yasak oldugu data tipleri filan sorunu cikiyor. Mesela:

Title nvarchar(50)
Revision nchar(5)
FileName nvarchar(400)

iceren querylere karsilik 3'unu birden indexleyemiyor (nvarchar, nchar karakter basina 2 bytes - total (50+5+400)*2 = 910). Sorunu cozmek icin ikisini indexe alip sonuncuyu include'a aliyorsun:

SQL
USE AdventureWorks;

GO
CREATE INDEX IX_Document_Title       
ON Production.Document (Title, Revision)       
INCLUDE (FileName);

select title, revision
select title, revision, filename

gibi queryler tamamiyle bu indexten karsilanabiliyor:) Text,nText,Image disinda tum datatiplarini kabul etmesi baska bir artisi.


SQL
USE AdventureWorks;

GO
SELECT AddressLine1, AddressLine2, City, StateProvinceID, PostalCode
FROM Person.Address
WHERE PostalCode BETWEEN N'98000' AND N'99999';

Burada gercekte indexe ihtiyaci olan postalCode.

USE AdventureWorks;
GO
CREATE INDEX IX_Address_PostalCode       
ON Person.Address (PostalCode)       
INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);

ile yatilan index hem o cok kullanilacak where'i karsiliyor hem de tum sonuc indexten alinabiliyor.

Tabii dokumentasyonun sonunda da uyarisi geliyor:) Gereginden fazla yapmaya baslarsan index boyutunun buyumesi, daha az index satirinin bir sayfaya sigmasi (8K blok) vs. "Query Tuning"e bak diyor (o diyor ben demedim:)


With kismi genelde indexin olusturulmasi sirasinda kullanilacak kaynak/yontem vs + index sayfasinin ne kadar kullanilacagi, ne kadar tampon birakacagin gibi seylerle ilgili. DBA olmadigin surece bence varsayilanlari kullan gec.

5

Re: Foreign Key ve Index

Çetin harikasın çok teşekkür ederim.

/o---------------------o\
     www.haser.com
\o---------------------o/

6

Re: Foreign Key ve Index

SQL Server Tuning wizard sonucunda indexlerin dışında bir de istatistikler geliyor, bunlar nedir?
database oluştururken auto create statistics diye bir şey var, onunla bir bağlantısı var mıdır?