Provided by:
manpages-tr_1.0.5.1-2_all 
ISIM
CREATE INDEX - yeni bir indeks tanimlar
KULLANIM
CREATE [ UNIQUE ] INDEX isim ON tablo [ USING y"ontem ]
( { s"utun | ( ifade ) } [ i,sle,c_sinifi ] [, ...] )
[ TABLESPACE tablo_alani ]
[ WHERE dayanak ]
A,CIKLAMA
CREATE INDEX belirtilen bir tablo uzerinden bir indeks olusturur.
Indekslerin birincil kullanim amaci veritabani basarimini arttirmaktir
(ancak, uygunsuz kullanimi basarimin dusmesiyle sonuclanir).
Indeks icin anahtar alanlari sutun isimleri olarak ya da parantez
icinde yazilmis ifadeler olarak belirtilir. Indeksleme yontemi
coksutunlu indeksleri destekliyorsa, cok sayida alan belirtilebilir.
Bir indeks alani tablonun satirindaki bir veya daha fazla sutun
degerinden hesaplanan bir ifade olabilir. Bu ozellik, bazi temel veri
donusumlerini temel alan veriye daha hizli erisim saglamak icin
kullanilabilir. Ornegin, upper(col)'a gore hesaplanan bir indeks, WHERE
upper(col) = 'JIM' gibi bir deyimin belirtilebilmesini mumkun kilar.
PostgreSQL B-tree, R-tree, hash ve GiST indeksleme yontemlerini icerir.
B-tree indeksleme yontemi bir Lehman-Yao yuksek bilinirlikli B-tree
gerceklenimidir. R-tree indeksleme yontemi, Gutman'in dordul ayirma
algoritmasi kullanilarark gerceklenir. Hash indeksleme yontemi ise
Litwin'in bir gerceklenimidir. Kullanicilar da kendi indeksleme
yontemini tanimlayabilir ama bu oldukca karmasiktir.
WHERE deyiminin varliginda, bir kismi indeks olusturulur. Bir kismi
indeks, bir tablonun kalanina gore indeksleme bakimindan daha
kullanisli olan bir bolumundeki girdileri iceren bir indekstir.
Ornegin, hem toptan hem de perakende siparisleri iceren bir tablomuz
olsun, perakende siparislerin tabloda daha az bulunmasina karsin en sik
kullanilanlarin bunlar oldugunu varsayalim. Sadece bu kayitlarla ilgili
bir indeks olusturarak basarimi onemli olcude arttirabilirsiniz. Baska
bir olasi kismi indeks uygulamasi, tablonun bir alt kumesindekilerin
essizligini saglamak icin WHERE ile UNIQUE'in birlikte kullanimidir.
WHERE ile kullanilan ifade sadece indekslenen tablonun sutunlarina
basvurabilir ama sadece indekslenen degil, butun sutunlar
kullanilabilir. Simdilik, WHERE deyimi icinde altsorgular ve ortak
deger islevleri de kullanilamamaktadir. Ayni kisitlamalar ifadelerdeki
indeks alanlari icin de gecerlidir.
Bir indeks taniminda kullanilan butun islevler ve islecler IMMUTABLE
imli olmalidir, yani sonuclar bunlarin argumanlarina bagimli olmali ve
argumanlari asla yorumlanabilir olmamalidir (baska bir tablonun icerigi
ya da simdiki zaman kullanilamaz). Bu sinirlama indeksin davranisinin
iyi tanimlanmis olmasini saglar. Bir kullanici tanimli islevi bir
indeks ifadesinde ya da WHERE deyiminde kullanmak istiyorssaniz, islevi
tanimlarken IMMUTABLE imli olmasini saglamayi unutmayin.
PARAMETRELER
UNIQUE Indeks olusturulurken ve her veri eklenisinde, tabloda
birbirinin ayni degerler bulunmamasi icin sistemin sinama
yapmasini saglar. Girdilerin yinelenmesine sebep olacak bir veri
girme veya guncelleme isleminin yapilmaya calisilmasi bir hata
uretecektir.
isim Olusturulacak indeksin ismi; burada sema nitelemeli isimler
kullanilamaz. Indeks daima tabloyu iceren semada olusturulur.
tablo Indekslencek tablonun ismi (sema nitelemeli olabilir).
y"ontem Indeks icin kullanilacak yontemin ismi. Deger olarak, btree,
hash, rtree ve gist verilebilir. btree ontanimli yontemdir.
s"utun Tablo sutunun ismi.
ifade Tablonun bir ya da daha fazla sutunu ile ilintili bir ifade.
Ifade yukaridaki sozdiziminde gosterildigi gibi parantez icinde
yazilmalidir. Ancak, ifade bir islev cagrisi bicimindeyse
parantez icine alinmayabilir.
i,sle,c_sinifi
Bir islec sinifinin ismi. Ayrintilar icin asagiya bakiniz.
tablo_alani
Indeksin olusturulacagi tablo alani. Belirtilmezse,
default_tablespace yapilandirma degiskeninin degeri; bu
degiskene bir deger atanmamissa veritabaninin ontanimli tablo
alani kullanilir.
dayanak
Bir kismi indeks icin kisit ifadesi.
EK BILGI
Indekslerin hangi durumlarda yararli oldugu, hangi durumlarda
kullanilmayacagi, ne zaman kullanildigi gibi bilgileri
http://www.postgresql.org/docs/8.0/static/indexes.html adresinde
bulabilirsiniz.
Simdilik, cok sutunlu indekslerde sadece B-tree ve GiST indeksleme
yontemleri desteklenmektedir. Ontanimli olarak en fazla 32 alan
belirtilebilir. (Bu sinir PostgreSQL kurulum icin yapilandirilirken
degistirilebilir.) B-tree simdilik sadece essiz indeksleri
desteklemektedir.
Bir islec sinifi bir indeksin her sutunu icin belirtilebilir. Islec
sinifi indeks tarafindan sutunlar icin kullanilacak islecleri belirler.
Ornegin, dort baytlik tamsayilar uzerindeki bir B-tree indeksi int4_ops
sinifini kullanirdi; bu islec sinifi dort baytlik tamsayilarin
karsilastirma islevlerini icerir. Uygulamada, sutun turune gore
ontanimli olan islec sinifi genellikle yeterli olur. Islec siniflarina
sahip olmanin ana esprisi, birden fazla anlamli siralamasi olabilen
bazi veri turlerinin olmasidir. Ornegin, bir karmasik sayi veri turu
icin siralamayi hem gercel kismi hem de mutlak degeri icin yapmak
isteyebiliriz. Bunu veri turu icin iki islec sinifi tanimlayarak ve
indeksi olustururken bu siniflardan birini belirterek yapabilirdik.
Islec siniflari hakkinda daha fazla bilgi edinmek icin
http://www.postgresql.org/docs/8.0/static/indexes-opclass.html ve
http://www.postgresql.org/uygulamalar/pgsql/xindex.html adreslerine
bakiniz.
Bir indeksi kaldirmak icin DROP INDEX [drop_index(7)] kullanilir.
Indeksler ontanimli olarak IS NULL deyimleri icin kullanilmazlar. Boyle
durumlarda indeksleri kullanmanin en iyi yolu, IS NULL dayatmasini
kullanan bir kismi indeks olusturmaktir.
"ORNEKLER
films tablosunun title sutunu uzerinde bir B-tree indeksi olusturmak
icin:
CREATE UNIQUE INDEX title_idx ON films (title);
films tablosunun code sutunu uzerinde bir indeks olusturup, bu indeksin
indexspace tablo alaninda kalmasi icin:
CREATE INDEX code_idx ON films(code) TABLESPACE indexspace;
UYUMLULUK
CREATE INDEX bir PostgreSQL olusumudur. SQL standardinda indeksler
icin bir bahis yoktur.
ILGILI BELGELER
ALTER INDEX [alter_index(7)], DROP INDEX [drop_index(7)].
,CEVIREN
Nilgun Belma Buguner <nilgun (at) belgeler.gen.tr>, Nisan 2005