Provided by:
manpages-tr_1.0.5.1-1.1_all 
İSİM
CREATE INDEX - yeni bir indeks tanımlar
KULLANIM
CREATE [ UNIQUE ] INDEX isim ON tablo [ USING yöntem ]
( { sütun | ( ifade ) } [ işleç_sınıfı ] [, ...] )
[ TABLESPACE tablo_alanı ]
[ WHERE dayanak ]
AÇIKLAMA
CREATE INDEX belirtilen bir tablo üzerinden bir indeks oluşturur.
İndekslerin birincil kullanım amacı veritabanı başarımını arttırmaktır
(ancak, uygunsuz kullanımı başarımın düşmesiyle sonuçlanır).
İndeks için anahtar alanları sütun isimleri olarak ya da parantez
içinde yazılmış ifadeler olarak belirtilir. İndeksleme yöntemi
çoksütunlu indeksleri destekliyorsa, çok sayıda alan belirtilebilir.
Bir indeks alanı tablonun satırındaki bir veya daha fazla sütun
değerinden hesaplanan bir ifade olabilir. Bu özellik, bazı temel veri
dönüşümlerini temel alan veriye daha hızlı erişim sağlamak için
kullanılabilir. Örneğin, upper(col)'a göre hesaplanan bir indeks, WHERE
upper(col) = 'JIM' gibi bir deyimin belirtilebilmesini mümkün kılar.
PostgreSQL B-tree, R-tree, hash ve GiST indeksleme yöntemlerini içerir.
B-tree indeksleme yöntemi bir Lehman-Yao yüksek bilinirlikli B-tree
gerçeklenimidir. R-tree indeksleme yöntemi, Gutman'in dördül ayırma
algoritması kullanılarark gerçeklenir. Hash indeksleme yöntemi ise
Litwin'in bir gerçeklenimidir. Kullanıcılar da kendi indeksleme
yöntemini tanımlayabilir ama bu oldukça karmaşıktır.
WHERE deyiminin varlığında, bir kısmî indeks oluşturulur. Bir kısmî
indeks, bir tablonun kalanına göre indeksleme bakımından daha
kullanışlı olan bir bölümündeki girdileri içeren bir indekstir.
Örneğin, hem toptan hem de perakende siparişleri içeren bir tablomuz
olsun, perakende siparişlerin tabloda daha az bulunmasına karşın en sık
kullanılanların bunlar olduğunu varsayalım. Sadece bu kayıtlarla ilgili
bir indeks oluşturarak başarımı önemli ölçüde arttırabilirsiniz. Başka
bir olası kısmî indeks uygulaması, tablonun bir alt kümesindekilerin
eşsizliğini sağlamak için WHERE ile UNIQUE'in birlikte kullanımıdır.
WHERE ile kullanılan ifade sadece indekslenen tablonun sütunlarına
başvurabilir ama sadece indekslenen değil, bütün sütunlar
kullanılabilir. Şimdilik, WHERE deyimi içinde altsorgular ve ortak
değer işlevleri de kullanılamamaktadır. Aynı kısıtlamalar ifadelerdeki
indeks alanları için de geçerlidir.
Bir indeks tanımında kullanılan bütün işlevler ve işleçler IMMUTABLE
imli olmalıdır, yani sonuçlar bunların argümanlarına bağımlı olmalı ve
argümanları asla yorumlanabilir olmamalıdır (başka bir tablonun içeriği
ya da şimdiki zaman kullanılamaz). Bu sınırlama indeksin davranışının
iyi tanımlanmış olmasını sağlar. Bir kullanıcı tanımlı işlevi bir
indeks ifadesinde ya da WHERE deyiminde kullanmak istiyorssanız, işlevi
tanımlarken IMMUTABLE imli olmasını sağlamayı unutmayın.
PARAMETRELER
UNIQUE İndeks oluşturulurken ve her veri eklenişinde, tabloda
birbirinin aynı değerler bulunmaması için sistemin sınama
yapmasını sağlar. Girdilerin yinelenmesine sebep olacak bir veri
girme veya güncelleme işleminin yapılmaya çalışılması bir hata
üretecektir.
isim OluÅŸturulacak indeksin ismi; burada ÅŸema nitelemeli isimler
kullanılamaz. İndeks daima tabloyu içeren şemada oluşturulur.
tablo İndekslencek tablonun ismi (şema nitelemeli olabilir).
yöntem İndeks için kullanılacak yöntemin ismi. Değer olarak, btree,
hash, rtree ve gist verilebilir. btree öntanımlı yöntemdir.
sütun Tablo sütunun ismi.
ifade Tablonun bir ya da daha fazla sütünu ile ilintili bir ifade.
İfade yukarıdaki sözdiziminde gösterildiği gibi parantez içinde
yazılmalıdır. Ancak, ifade bir işlev çağrısı biçimindeyse
parantez içine alınmayabilir.
işleç_sınıfı
Bir işleç sınıfının ismi. Ayrıntılar için aşağıya bakınız.
tablo_alanı
İndeksin oluşturulacağı tablo alanı. Belirtilmezse,
default_tablespace yapılandırma değişkeninin değeri; bu
değişkene bir değer atanmamışsa veritabanının öntanımlı tablo
alanı kullanılır.
dayanak
Bir kısmî indeks için kısıt ifadesi.
EK BİLGİ
İndekslerin hangi durumlarda yararlı olduğu, hangi durumlarda
kullanılmayacağı, ne zaman kullanıldığı gibi bilgileri
http://www.postgresql.org/docs/8.0/static/indexes.html adresinde
bulabilirsiniz.
Şimdilik, çok sütunlu indekslerde sadece B-tree ve GiST indeksleme
yöntemleri desteklenmektedir. Öntanımlı olarak en fazla 32 alan
belirtilebilir. (Bu sınır PostgreSQL kurulum için yapılandırılırken
deÄŸiÅŸtirilebilir.) B-tree ÅŸimdilik sadece eÅŸsiz indeksleri
desteklemektedir.
Bir işleç sınıfı bir indeksin her sütunu için belirtilebilir. İşleç
sınıfı indeks tarafından sütunlar için kullanılacak işleçleri belirler.
Örneğin, dört baytlık tamsayılar üzerindeki bir B-tree indeksi int4_ops
sınıfını kullanırdı; bu işleç sınıfı dört baytlık tamsayıların
karşılaştırma işlevlerini içerir. Uygulamada, sütun türüne göre
öntanımlı olan işleç sınıfı genellikle yeterli olur. İşleç sınıflarına
sahip olmanın ana esprisi, birden fazla anlamlı sıralaması olabilen
bazı veri türlerinin olmasıdır. Örneğin, bir karmaşık sayı veri türü
için sıralamayı hem gerçel kısmı hem de mutlak değeri için yapmak
isteyebiliriz. Bunu veri türü için iki işleç sınıfı tanımlayarak ve
indeksi oluştururken bu sınıflardan birini belirterek yapabilirdik.
İşleç sınıfları hakkında daha fazla bilgi edinmek için
http://www.postgresql.org/docs/8.0/static/indexes-opclass.html ve
http://www.postgresql.org/uygulamalar/pgsql/xindex.html adreslerine
bakınız.
Bir indeksi kaldırmak için DROP INDEX [drop_index(7)] kullanılır.
İndeksler öntanımlı olarak IS NULL deyimleri için kullanılmazlar. Böyle
durumlarda indeksleri kullanmanın en iyi yolu, IS NULL dayatmasını
kullanan bir kısmî indeks oluşturmaktır.
ÖRNEKLER
films tablosunun title sütunu üzerinde bir B-tree indeksi oluşturmak
için:
CREATE UNIQUE INDEX title_idx ON films (title);
films tablosunun code sütunu üzerinde bir indeks oluşturup, bu indeksin
indexspace tablo alanında kalması için:
CREATE INDEX code_idx ON films(code) TABLESPACE indexspace;
UYUMLULUK
CREATE INDEX bir PostgreSQL oluşumudur. SQL standardında indeksler
için bir bahis yoktur.
İLGİLİ BELGELER
ALTER INDEX [alter_index(7)], DROP INDEX [drop_index(7)].
ÇEVİREN
Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Nisan 2005