Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[ÇÖZÜLDÜ] Veritabanından hızlı veri çekmek için tavsiye
#1
Selamlar

Arkadaşlar hergün tabloma 450 bin satır veri eklenmektedir. 1 günlük veri sorgulaması yaptığımda delphide kodların çalışması ve bu verileri dbgride aktarması yaklaşık 1 dakika sürmektedir. Bu verileri daha süratli çekmek için öneriniz nedir?

Koda gelince; standart olarak
select min(degerx) where tarih between tarih1 and tarih2
  ve  
select max(degerx) where tarih between tarih1 and tarih2
 şeklindedir. Veritabanı olarak mysql kullanıyorum. Delphi içerisinde yapılan işlem ise, bu 450 bin satır içerisinden 350 farklı bilginin minimum ve maksimum değerleri sorgulamak ve bu değerleri başka bir tabloya insert etmektir.

Ancak tarih aralığı birkaç gün olursa, program cevap vermeyecek duruma geliyor. Verinin daha hızlı sorgulanması adına yardımlarınızı rica ediyorum.
Cevapla
#2
Bu sorguları mysql workbench vb database yönetim araçlarında çalıştırdığınızda nasıl bir tepki alıyorsunuz.
Gecikme database tarafındamı kaynaklanıyor, network transfer sürecindemi yoksa delphi içerisindeki iç hesaplamadamı.
İşlemi uzatan kısmı tespit edip ona göre bir çözüm aramak mantıklı olur
Cevapla
#3
Merhaba,
Yardımcı (özet) tablolar oluştursan
ana tablo için bu tabloları güncelleyecek triggerlar yazsan
ve sorgularını yardımcı tablolar üzerinde yapsan işini görebilir
Cevapla
#4
Selamlar

Tabloda bulunan İndex yapısını değiştirdim. 1 alanı indexlemiştim, 3 e çıkardım. Ayrıca başka bir tabloya da index alanı ekledim. Süre ölçümleri yaptığımda, 2 indeksli tabloda sorgulama işlemi 126 saniye sürerken, 3 indeksli tabloda 15 saniyeye düştü.
Cevapla
#5
@wiseman
Öncelikle hız için yazmamı daha önemli sorgumu daha önemli buna karar vermende fayda var
Eğer yazma sırasında hızın çok büyük önemi yoksa ve önem sorgu sırasında ise indexleri kaldırıp @meko nun tavsiyesini dikkate almanı öneririm.
indexler sorgularda hız kazandırır doğrudur fakat yaza sırasında hızı düşürür. bunuda göz ardı etmemenizi öneririm.
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#6
(31-05-2019, Saat: 14:15)adelphiforumz Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.@wiseman
Öncelikle hız için yazmamı daha önemli sorgumu daha önemli buna karar vermende fayda var
Eğer yazma sırasında hızın çok büyük önemi yoksa ve önem sorgu sırasında ise indexleri kaldırıp @meko nun tavsiyesini dikkate almanı öneririm.
indexler sorgularda hız kazandırır doğrudur fakat yaza sırasında hızı düşürür. bunuda göz ardı etmemenizi öneririm.

@meko nun söylemiş olduğu işlemi zaten temp tablo oluşturarak yapmıştım ve hala da bu yapı devam etmekte. Ancak önemli olan sorgunun bana hızlı gelmesiydi. Sonrasını zaten temp tabloya yazarak ara tablo ile hesaplamaları devreye alıyorum. İlginize teşekkür ederim.
Cevapla
#7
Sorunuzunu index oluşturarak çözüme kavuşturmuşsunuz.  Belki biliyorsunuzdur fakat tekrar etmekte fayda olduğunu düşünüyorum.

Bir tabloda birde fazla index varsa siz use index ile şart koşmazsanız, sorgudaki where cümlesine göre database var olan indexlerden uygun bir tanesini seçecektir.

Kullanılan indexleri ve index sayesinde süzülen kayıt bilgilerini

Explain
select min(degerx) where tarih between tarih1 and tarih2

veya daha detaylı bilgi için

Explain extended
select min(degerx) where tarih between tarih1 and tarih2

ile oluşturduğunuz indexlerin etkilerini gözlemleyebilirsiniz.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  HTML Sayfaya Veri Çekme Hayati 1 82 17-07-2019, Saat: 21:44
Son Yorum: SimaWB
  Excel'den veri çekme hatası harezmi 7 96 17-07-2019, Saat: 18:40
Son Yorum: harezmi
  Parmak izi okuyucudan veri çekmek ermanispir@gmail.com 9 328 16-07-2019, Saat: 13:47
Son Yorum: wiseman
  DBGrid1 den Excel Veri Gönderme OZCANK 0 93 13-07-2019, Saat: 14:03
Son Yorum: OZCANK
  Çözüldü. Fastreport ta çalışma anında dataset atama cinarbil 2 104 11-07-2019, Saat: 17:55
Son Yorum: cinarbil



Konuyu Okuyanlar: 1 Ziyaretçi