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

İSİM

       CREATE INDEX - yeni bir indeks tanımlar

KULLANIM

       CREATE [ UNIQUE ] INDEX isim ON tablo [ USING yntem ]
           ( { stun | ( ifade ) } [ ile_snf ] [, ...] )
           [ 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).

       yntem İndeks  için  kullanılacak  yöntemin  ismi. Değer olarak, btree,
              hash, rtree ve gist verilebilir. btree öntanımlı yöntemdir.

       stun  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.

       ile_snf
              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