Provided by:
manpages-tr_1.0.5.1-1.1_all 
İSİM
CLUSTER - bir tabloyu bir indekse göre sıralar
KULLANIM
CLUSTER indeks_ismi ON tablo_ismi
CLUSTER tablo_ismi
CLUSTER
AÇIKLAMA
CLUSTER, PostgreSQL'in ismi tablo_ismi ile belirtilen tabloyu
indeks_ismi isimli indeksine göre sıralamasını sağlar. İndeks
tablo_ismi tablosunda evvelce tanımlanmış bir indeks olmalıdır.
Bir tablo bu işlem sırasında, indeks bilgisine göre fiziksel olarak
sıralanır. Sıralama tek seferlik bir işlemdir: işlemin ardından tablo
güncellendiğinde değişiklik sıralama işlemine tabi tutulmaz. Yani yeni
eklenen ya da güncellenen bir satırın indeks sırasına uygun olarak
saklanmasına çalışılmaz. Eğer bu ya da belirli aralıklarla sıralama
yapılmak isteniyorsa, komut yinelenerek yeniden sıralama
yaptırılmalıdır.
Bir tablo bir kere sıralandı mı, PostgreSQL sıralama için hangi
indeksin kullanıldığını hatırlar. CLUSTER tablo_ismi ile tablo ilk
sıralamada kullanılan indeks ile tekrar sıralanacaktır.
CLUSTER parametresiz olarak kullanıldığında, komutu kullanan
kullanıcının sahibi olduğu o anki veritabanındaki bütün tablolarda ya
da komutu ayrıcalıklı kullanıcı kullanıyorsa bütün veritabanlarındaki
bütün tablolarda yeniden sıralama yapılır (Hiç sıralama yapılmamış
tablolara dokunulmaz). Bu şekilde kullanım, bir hareketin ya da bir
işlevin içinden gerçekleştirilemez.
Bir tablonun sıralanması sırasında üzerinde bir ACCESS EXCLUSIVE kilidi
oluşturulur. Bu, tablonun işlem bitene kadar başka her türlü veritabanı
işleminden (hem okuma hem yazma) korunmasını sağlar.
PARAMETRELER
indeks_ismi
bir indeksin ismi.
tablo_ismi
Bir tablonun ismi (ÅŸema nitelemeli olabilir).
EK BİLGİ
Bir tablo içinde tek bir satıra erişildiği durumlarda verini sırasının
aslında önemi yoktur. Ancak, başkalarından daha fazla veriye erişmek
ve bunları gruplayan bir indeks kullanmak eğilimindeyseniz, CLUSTER
kullanmak yararlı olacaktır. Bir tablodan belli bir aralıkta indeksli
değerler ya da çok sayıda satırla eşleşen tek bir indeksli değer
isterseniz, indeks, eşleşen ilk satır için bellek sayfasını bir kere
tanımladıktan sonra, eşleşen diğer tüm satırlar bir ihtimal zaten aynı
bellek sayfasında olacağından CLUSTER'ın hem disk erişiminde hem de
sorguyu hızlandırmakta çok yardımı olur.
Sıralama işlemi sırasında, tablonun verisini indeks sırasına göre
içeren geçici bir kopyası oluşturulur. Ayrıca tablo üzerindeki her
indeksin geçici kopyaları da oluşturulur. Bunun yanında, disk üzerinde
en azından tablo ve indeksin toplam boyutunda boş bir alana ihtiyaç
olacaktır.
CLUSTER sıralama bilgilerini hatırlayacağından, bir defa sıralanan
tablolar kolayca tekrar sıralanabilir ve VACUUM'a benzeyen bir ayarlama
ile tabloların belirli zaman aralıklarında yeniden sıralanması
saÄŸlanabilir.
Planlamacının tabloların sıralanması hakkında istatistikleri
kaydetmesinden dolayı, yeni sıralanmış tablo üzerinde ANALYZE
[analyze(7)] çalıştırılması tercih edilmelidir. Aksi takdirde,
planlamacı zayıf sorgu planı seçimi yapabilir.
Veriyi sıralamanın başka bir yolu daha vardır. CLUSTER cümlesi özgün
tabloyu belirttiğiniz indeks sıralamasını kullanarak yeniden sıralar.
Satırlar bellekten indeks sırasına göre çekileceğinden, eğer bellek
tablosu sırasızsa, çok büyük tablolarda girdiler farklı bellek
sayfalarında olacağından, üstüne bir de takas olarak disk kullanılmak
zorunda kalınırsa bu işlem oldukça yavaş olabilir. (PostgreSQL'in bir
arabelleği olsa da dev bir tablo genellikle bu arabelleğe sığmaz.) Bir
tabloyu sıralamanın diğer bir yolu, istenen sırayı oluşturmak için
ORDER BY deyimi içindeki PostgreSQL sıralama kodunu kullanan,
CREATE TABLE yeni_tablo AS
SELECT sütun_listesi FROM tablo ORDER BY sütun_listesi;
cümlesini kullanmaktır. Bu, sırasız veri için bir indeksleme yapmaktan
genellikle daha hızlıdır. Bundan sonra eski tabloyu silip,
yeni_tablo'ya eski tablonun ismini vermek için ALTER TABLE ... RENAME
cümlesini kullanın ve tablonun indekslerini yeniden oluşturun. Ancak,
bu yaklaşım OID'leri, kısıtları, yabancı anahtar ilişkilerini,
kullanıcı izinlerini ve tablonun diğer yardımcı özellklerini
korumayacağından, bu öğeler elle yeniden oluşturulmalıdır.
ÖRNEKLER
employees tablosunu emp_ind indeksine göre sıralamak için:
CLUSTER emp_ind ON emp;
employees tablosunu aynı indeksi kullanarak yeniden sıralamak için:
CLUSTER emp;
Veritabanındaki evvelce sıralanmış tüm tabloları sıralamak için:
CLUSTER;
UYUMLULUK
SQL standardında CLUSTER diye bir deyim yoktur.
İLGİLİ BELGELER
clusterdb(1).
ÇEVİREN
Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Nisan 2005