Provided by: manpages-tr_1.0.5.1-2_all bug

İ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

PostgreSQL                                                                                       CREATE INDEX(7)