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

---------

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

From: ahmet dizioglu <adizioglu_at_gmail.com>
Date: Wed, 9 Jan 2008 11:19:48 +0200
Message-ID: <1149eba70801090119k5eb47379rb2e9a0436ecc480f@mail.gmail.com>

Konusu gelmişken bende sorayım, sorum da bu konuyla ilgili.

Bazı programlarda SQL cümleciğini aşağıdaki gibi görüyorum.

SELECT au_lname, au_fname, phone
    FROM authors (INDEX = aunmind)
        WHERE au_1name = 'Smith'

Ben eski programcı olduğum için hatırlıyorum, bu modern database lerden
önceki database lerde arama yaparken index belirmeniz gerekirdi, yoksa arama
yavaş olurdu, SQL dede böyle bir durum olabilir mi?

On Jan 8, 2008 5:04 PM, Uygar UZUNHASAN <uygaruzunhasan_at_yahoo.com> wrote:

> 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_at_yahoo.com
>
> ------------------------------
> Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it
> now.<http://us.rd.yahoo.com/evt=51733/*http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ+>
>
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama_at_liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>
>

-- 
Ahmet Dizioglu

_______________________________________________
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 - 10:47:43 EET

---------

Bu arsiv hypermail 2.2.0 tarafindan uretilmistir.