table'dan veri çekmek için en mantıklı yol nedir?

Oracle veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
sairalper
Üye
Mesajlar: 23
Kayıt: 15 May 2007 04:54
Konum: Bursa
İletişim:

table'dan veri çekmek için en mantıklı yol nedir?

Mesaj gönderen sairalper »

oracle'a yeni başlamak üzereyim. bu sorum genelde bütün v.tabanları ile ilgili ama oracle'da deneyeceğim için oracle'a yazıyorum.
binlerce kaydın bulunduğu 5 ayrı table'dan bazı verileri çekip yeni verilerle beraber başka bir table'a kayıt yaptıracağım. sorum şu:
server'a fazla yüklenmemek ve en az yükle işlemi gerçekleştirmek için sql sorgu mu, index mi yoksa master-detail ilişkisini mi tavsiye edersiniz?
uzman arkadaşlar cevaplarlarsa çok sevinirim.
herkese kolay gelsin.
Alper Şirvan
Şair, yazar, ressam.. 3 kitabı var...
Yazılımcı... Kamuda memur...
Galatasaray'lı... Spor aşığı...
Güneş Enerjili Tekerlekli Sandalyenin
Fikir Babası...
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Bu konu master-detail ili ilgili görünmemekte. Verileri SQL içinden (insert into tablo (alan1, alan2,..) select secilen_alan1, secilen_alan2, .. from tablo_lar) mi atacaksınız yoksa program içinden mi? Tabi ki çekilecek alanların indeksi olması oluşturulmaları hızını olumlu etkileyecektir :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
sairalper
Üye
Mesajlar: 23
Kayıt: 15 May 2007 04:54
Konum: Bursa
İletişim:

Mesaj gönderen sairalper »

ilginize teşekkür ederim.
programın içinden kodlayarak yapacağım.daha netleşmiş değil ama öyle görünüyor. haftabaşında netleşecek.
diğer tablolardaki ortak alanları yenitabloya insert etmek yerine dbgrid vs ile id bağlantılı ekranda göstersek olabilir mi?
Alper Şirvan
Şair, yazar, ressam.. 3 kitabı var...
Yazılımcı... Kamuda memur...
Galatasaray'lı... Spor aşığı...
Güneş Enerjili Tekerlekli Sandalyenin
Fikir Babası...
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Çekeceğiniz bilgiler sadece veri tabanı üzerindeki diğer tablolarda var ise ya da SQL komutları ile istenilen şekle çevrilebiliyorsa yukarıdaki yöntem en pratik ve en hızlısıdır. Eğer delphi tarafta da bazı hesaplamalar yapıp o şekilde veriler eklenecekse herhangi bir datasource bileşenine bağlı olmayan bir dataset/query bileşeni ile yapmakta fayda var. DataSource ve dolaysıyla aynı anda grid vb. de göstermek ciddi bir yavaşlama sağlayacaktır. Eğer bu tablo zaten bir grid e bağlı ise o zaman işleme başlamadan önce;

Kod: Tümünü seç

...
Query.DataSource.DisableControls;
....
// insert işlemi
...
Query.DataSource.EnableControls;
şeklinde de olabilir.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
shadowmann
Üye
Mesajlar: 508
Kayıt: 30 Oca 2004 10:49

Mesaj gönderen shadowmann »

Ek olarak insert edeceğiniz alan indexlenmiş ise bu hızı olumsuz yönde etkileyecektir. Ayrıca binlerce kayıtta merak etmeyin bir sorun olmaz. yüzbinler ve milyonlar deseniz neyse.Ayrıca kaydın sayısı değil alandaki bilginin boyutunu da dikkate almak lazım. Örneğin tarih alanı ile içeriğine 10 sayfa text attığınız bir alan hız konusunda oldukça farklı sonuçlar almanıza neden olacaktır.
Sorunuzu daha açık yazmanız uzman arkadaşların verecekleri cevapları daha net yazmalarını sağlayacaktır.
sql sorgu mu, index mi yoksa master-detail ilişkisini mi tavsiye edersiniz?
Bu yazdıklarınız birbirinin yerine geçen şeyler değil.
Her zaman bir vâmuk-i azra olur alem bu ya,
Nev-be-nev efsaneler peydâ olur alem bu ya,
Kabz u bast kıl tefekkür aleminde ey gönül,
Vakt-i sermânın sonu, vakt-i germân olur alem bu ya...
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

@shadowmann arkadaşımız index hız bağıntısı hakkında bir şey söylemiş; hep hızlanmak için ilgili alanların indekslenmesini söylüyoruz. Bu hızlanma sadece veriyi okumada doğrudur. Düşünün ki her indekslenen alan kabaca ayrı bir indeks tablosu demektir ve kayıt tabloya yazılırken ilgili indeks alanı/alanları da yerlerine yazılmaktadır bu da hiç indeks olmayan ya da sadece tek bir (PK) indeksi olan tabloya insert hızına göre daha yavaş olacaktır. Bu yavaşlık kullanılan yapı ve sisteme göre görecelidir. Çok yüksek miktardaki veriden bahsederken hissedilebilir :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
sairalper
Üye
Mesajlar: 23
Kayıt: 15 May 2007 04:54
Konum: Bursa
İletişim:

Mesaj gönderen sairalper »

dataları sorunsuz çektim. hatta lookupcombo bile kullandım
ama insert aşamasında tüm günümü alan bir sıkıntı ile bir türlü işlemi gerçekleştiremedim.

yazdığım koda ;
SQL Navigator'de ORA-00900: invalid SQL statement ,
delphi içinde ise önce
'raised exception class EDBEngineErro with messsage 'General SQL error. ORA-00936: missing expression'.
sonra da; column not allowed here hatası aldım.

sorun ne olabilir arkadaşlar?
Alper Şirvan
Şair, yazar, ressam.. 3 kitabı var...
Yazılımcı... Kamuda memur...
Galatasaray'lı... Spor aşığı...
Güneş Enerjili Tekerlekli Sandalyenin
Fikir Babası...
Kullanıcı avatarı
sairalper
Üye
Mesajlar: 23
Kayıt: 15 May 2007 04:54
Konum: Bursa
İletişim:

Mesaj gönderen sairalper »

string alanlara #39 koyarak sorunu çözdüm.
sadece sql kullanarak master-detail hiç kullanmadım... basitçe anlatmak gerekirse şöyle birşeye ihtiyacım var:
bir table'da mesela id, adsoyad alanları var. (bu ana table)
diğer table'da da h_id,cocuk_adi (bu da detay)
table componentleri ile bu çok kolay ama sadece wwSQL ve benzeri komponentlerle sadece sql kodlarıyla bunu halletmem lazım...
ne tavsiye edersiniz?
Alper Şirvan
Şair, yazar, ressam.. 3 kitabı var...
Yazılımcı... Kamuda memur...
Galatasaray'lı... Spor aşığı...
Güneş Enerjili Tekerlekli Sandalyenin
Fikir Babası...
Cevapla