[Linux-programlama] Re: PostgreSQL + Qt4 hız sorunu ve indexleme

---------

[Linux-programlama] Re: PostgreSQL + Qt4 hız sorunu ve indexleme

From: Devrim GÜNDÜZ <devrim_at_gunduz.org>
Date: Wed, 9 Jan 2008 00:19:37 -0800 (PST)
Message-ID: <Pine.LNX.4.64.0801080816190.19934@community1.commandprompt.com>

Merhaba,

On Tue, 8 Jan 2008, Uygar UZUNHASAN wrote:

> Nasıl indexlemem gerektiğini anlamış değilim, b-tree, r-tree, hash...

r-tree kalktı zaten. Şu anda bu amaçla kullanabileceğiz b-tree indexidir.
O da öntanımlı olan zaten.

> Anladığım kadarıyla tamsayı = <> gibi işlemlerde b-tree daha doğru. Bir
> de AND kollandığım sorgular için farklı indexler mı oluşturmalıyım?

Hayır. Postgres güncel sürümlerinde (8.1 ve üzerin)bellekte bitmap index
oluşturuyor bunun için. Yani:

SELECT .. FROM ... WHERE c1=... AND c2=...

sorgusunda, eğer c1 ve c2 kolonunda index varsa AND sorgusu için bellekte
bir bitmap index oluşturuluyor ve sorgu bu index üzerinden yapılıyor. Bu
da başarım artışı sağlıyor. Eski sürümlerde and sorguları için c1 ve c2'yi
içeren iki index yaratmak gerekiyordu.

> indexler normal SELECT komutlarımızla işlerlik kazanır mı yoksa onlardan
faydalanmak için sorguları farklı şekilde mi düzenlemeliyiz?

Buna sorgu planlayıcısı karar verir. Sorgu planlayıcısının düzgün karar
vermesi için indexlerin düzenli olarak ANALYZE edilmesi ve veritabanının
da VACUUM işleminden geçirilmesi gerekli. bgwriter düzgün ayarlandığında
zaten bu işlemler önemli değil o kadar artık. Indexler her zaman hız
artışı sağlamaz -- aynı şekilde çok fazla index de sorguları yavaşlatır.

> 1) hangi tip index kullanmalıyım (=, ~* için)?

B-tree.

> 2) index oluşturmak çalışmaları için yeterli mi?

Yazdığım gibi, sorguların çıktısını EXPLAIN ANALYZE ile inceleyip o
indexin gerekli olup olmadığına bakmak gerekli.

> 3) AND, OR, LEFT JOIN kullandığım sorgular için birden fazla column mı indexlemeliyim?

Bkz üstteki bitmap index konusu. Ama yine de EXPLAIN ANALYZE çıktıları
inceleyin (çok söyledim ama önemli). Bazen sorgularda küçük değişiklikler
çok önemli sonuçlar getirebiliyor...

> query = "SELECT stokid, stokisim FROM stok WHERE stokid IN (SELECT
> stokid FROM stokindex WHERE parcano~*'" + arananStokNo + "') AND
> stokisim~*'" + arananAciklama + "'";

<kesildi>

EXPLAIN ANALYZE çıktısı nedir sorgunun?

> parnox.exec("SELECT parcano FROM stokindex WHERE stokid=" + stokno + " ORDER BY sorulma DESC");

work_mem kullanılır ORDER BY islemi nedeniyle -- work_mem düşükse başarım
sorunu yaşayabilirsiniz gelen sorgu kümesinin durumuma göre...

Saygılar,

--
Devrim GÜNDÜZ
RHCE		       _
ASCII ribbon campaign ( )     devrim~gunduz.org
against HTML e-mail    X      devrim~PostgreSQL.org
 		      / \     devrim.gunduz~linux.org.tr
             http://www.gunduz.org
_______________________________________________
Linux-programlama mailing list
Linux-programlama_at_liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Received on Wed 09 Jan 2008 - 09:47:27 EET

---------

Bu arsiv hypermail 2.2.0 tarafindan uretilmistir.