From: | Timu EREN <selamtux(at)gmail(dot)com> |
---|---|
To: | pgsql-tr-genel(at)postgresql(dot)org |
Subject: | Re: Cursor ve Subselect yada Join... |
Date: | 2006-09-07 02:47:24 |
Message-ID: | 200609070247.28240.selamtux@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-tr-genel |
Çarşamba 06 Eylül 2006 16:56 tarihinde şunları yazmıştınız:
> On Sep 06 06:54, Timu EREN wrote:
> > Oldukça büyük bir tablo üzerinde iki adet select yapmam ve bu select
> > işlemlerini subselect kullanarak yapmak durumundayım. (in / not in
> > için )
>
> Anladığım kadarı ile sorunu JOIN kullanarak daha efektif bir şekilde
> çözebiliriz? Sizin kullandığınız yöntemi düzeltmek yerine, problemin
> kendisini görebilir miyiz acaba?
Sorgunun tamamını henüz hazırlamadım. Aslında sorun tam olarak
06-09-2006 18:19 tarihinde söylemiş olduğun gibi aynı sorguyu iki farklı
subselect yada join ile iki defa execute etmektense tek bir defa execute edip
sonucu X+n kadar sorgu içerisine hem join hemde subselect içerisinde
kullanılıp kullanılamayacağını veya nasıl kullanılabilineceğini öğrenmek idi.
sorunun kendisi için ise daha istenen tüm veriler yerine oturmadığı için parça
parça çalışan 3 adet sorgu yazdığımdam elmanın tamamını görebilmek zor.
ancak şu kadarını söyleyebilirim. bu şimdilik ana sorunu oluşturmakta.
A tablosunda ki fieldone adında bir alan olduğunu var sayalım.
Bir uygulama bu fieldone adındaki veriyi belirli kurallar doğrultusunda başka
bir tabloya insert ediyor. (fieldone'da telefon numaraları mevcut. eğer
kurallar çerçevesinde telefon numarası kullanılabilinir ise CDR olarak başka
bir tablo üzerinde şu hat,şu zamanda bağlandı, şu kadar veri gitti vs. gibi
verilerin tutulması için insert işlemi )
Sorun hiç kullanılmamış Telefon numaralarını bulmak. ancak CDR'ın yazıldığı
tabloya her gün yaklaşık 450 ile 600 satır arasında veri girdiğinden bulmak
sorun oluyor, (hız vs. gibi sorunlar :) disk kullanımının %99 ile %93 lerde
gezdiğini düşünürsek :) ) Ben bu neden ile belirli tarih aralığında (örneğin
son 3 aylık bir süre için) hem hiç kullanılmamışların listesini hemde
kullanılan numaraların listesini almak istedim. (şimdi düşünüyorumda bir
FUNCTION tanımlayarak kullanılan numaraları bulmak daha kolay olacak :) )
Sorguyu psql komut aracı ile denediğimde 29 günden daha geriye gidildiğinde
index yerine seq scan yaptığını gördüm ve 2 aylık süre için bir subselect
yaptığımda 15 sn. den fazla süre alıyor. (index kullanmasına zorlayıp
denemedim) ve aklıma bir cursor oluşturup veriyi bu cursorde tutarak
(sorgunun bir kez çalıştırılması amacı ile) iki ayı işlem için
kullanabileceğimi düşündüm. (subselect içerisinde) ama şu an aklıma gelen bir
başka yolda record içerisine koyup ardından oluşan görüntü üzerinde işlem
yapmak olabilir (elbette bu durumda FUNCTION tanımlamak zorunda kalacağım
ancak asıl amacım bunu FUNCTION kullanmadan yapabilmek idi)
Her ne ise eğer record içerisine alınan veriler için sorgu bir defa çalışıyor
ise ve içerisinde tıpkı cursor gibi rahatça gezinebiliyor isek (ki açıkcası
çok hakim değilim bu tür konulara) record ilede sorunumu aşabilirim. yada
uykum geldi ve saçmalıyorum :)
> > SELECT field FROM othertable WHERE onefield NOT IN (FETCH ALL FROM myc );
> >
> > Bunu denediğimde şu hata mesajını alıyorum HATA: "ALL" yerinde söz
> > dizimi hatası at character ...
>
> Adı üstünde subSELECT, subUPDATE ya da subFETCH değil. (Gerçi artık
> RETURNING eklentisi ile bu söz biraz çuvallıyor ama, bildiğim kadarı ile
> subselect'lerin içine yalnızca SELECT sorguları yerleştirilebilir.)
>
>
> İyi çalışmalar.
--
Saygılar && İyi çalışmalar
Timu EREN (a.k.a selam)
From | Date | Subject | |
---|---|---|---|
Next Message | Victor Snezhko | 2006-09-07 04:32:39 | Re: BUG #1931: ILIKE and LIKE fails on Turkish locale |
Previous Message | Volkan YAZICI | 2006-09-06 18:19:38 | Re: Cursor ve Subselect yada Join... |