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

---------

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

From: Uygar UZUNHASAN <uygaruzunhasan_at_yahoo.com>
Date: Tue, 8 Jan 2008 07:04:38 -0800 (PST)
Message-ID: <573797.36384.qm@web60814.mail.yahoo.com>

biri şimdilik 25000 diğeri 30000 satırdan oluşan iki tablom var. Sorguların çalışması uzun sürüyor, özellikle de genel bir arama yaparsam (anahtar kelimeyi boş geçersem 20sn birkaç harf-sayı yazarsam 5-6sn). Sorun QT den kaynaklanıyor sanmıştım ancak sorgu yalın halleriyle de çok zaman alıyor. Aşağıda tabloları ve C++\Qt4 arama kodlarını veriyorum. tablolar şu şekilde: CREATE TABLE stok ( stokid serial NOT NULL, stokisim character varying, birim character varying, grup integer, kod integer, kullanim integer, model integer, ozel integer, tip integer, agirlik_birim integer DEFAULT 1, agirlik_brt numeric(12,3), agirlik_net numeric(12,3), boyut_birim integer DEFAULT 1, boyut_en numeric(12,3), boyut_boy numeric(12,3), boyut_yukseklik numeric(12,3), hacim_birim integer DEFAULT 1, hacim_brt numeric(12,3), hacim_net numeric(12,3), stok_not text, stok_kdv_orani numeric(4,2), CONSTRAINT stok_pkey PRIMARY KEY (stokid) ) WITHOUT OIDS; ALTER TABLE stok OWNER TO postgres; GRANT ALL ON TABLE stok TO postgres; GRANT ALL ON TABLE stok TO public; CREATE INDEX stok_stokid_index ON stok USING btree (stokid); ve CREATE TABLE stokindex ( parcano character varying NOT NULL, stokid bigint NOT NULL, stokxnot text, sorulma bigint DEFAULT 0, CONSTRAINT stokindex_pkey PRIMARY KEY (parcano), CONSTRAINT stokindex_stokid_fkey FOREIGN KEY (stokid) REFERENCES stok (stokid) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ) WITHOUT OIDS; ALTER TABLE stokindex OWNER TO postgres; CREATE INDEX stokindex_stokid_index ON stokindex USING btree (stokid); CREATE INDEX stokindex_pno_index ON stokindex USING btree (parcano); Nasıl indexlemem gerektiğini anlamış değilim, b-tree, r-tree, hash... 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? indexler normal SELECT komutlarımızla işlerlik kazanır mı yoksa onlardan faydalanmak için sorguları farklı şekilde mi düzenlemeliyiz? 1) hangi tip index kullanmalıyım (=, ~* için)? 2) index oluşturmak çalışmaları için yeterli mi? 3) AND, OR, LEFT JOIN kullandığım sorgular için birden fazla column mı indexlemeliyim? not:kodları yazışımdaki sebep "benim yerime yazın" kolaycılığı değil yanlış anlamayın, yalnızca çalışma sistemini göstermek istedim. ... QString arananStokNo = lineStokParcaAra->text(); QString arananAciklama = lineStokAcikAra->text(); QString arananMakina = comboMakina->currentText(); query = "SELECT stokid, stokisim FROM stok WHERE stokid IN (SELECT stokid FROM stokindex WHERE parcano~*'" + arananStokNo + "') AND stokisim~*'" + arananAciklama + "'"; if (radioMakina->isChecked()) { // bu şart genelde kapalı durumdadır query += " AND stokid IN (SELECT makinaindex.stokid FROM makinaindex, makina WHERE makinaindex.makinaid=makina.makinaid AND makina.makina_isim ~*'" + arananMakina + "')"; } anas.exec(query); while(anas.next()) { QSqlQuery parnox; parnox.exec("SELECT parcano FROM stokindex WHERE stokid=" + stokno + " ORDER BY sorulma DESC"); int iR=1; while(parnox.next()) { // i->setText(0, parnox.value(0).toString()); } ... Uygar UZUNHASAN uygaruzunhasan@yahoo.com ____________________________________________________________________________________ Never miss a thing. Make Yahoo your home page. http://www.yahoo.com/r/hs

_______________________________________________
Linux-programlama mailing list
Linux-programlama_at_liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Received on Tue 08 Jan 2008 - 16:32:40 EET

---------

Bu arsiv hypermail 2.2.0 tarafindan uretilmistir.