slayer1ss adlı üyeden alıntı: mesajı görüntüle
Dediğim gibi şu anda tüm taksitler aynı veritabanındaki tek bir tabloda, cari işlemler ve sözleşmeler de aynı şekilde kendilerine ait tablolarda duruyorlar sadece merak ettiğim acaba bunları tiplerine göre farklı tablolara almak günlük kullanımda bu şekilde farklı tablolarda sorgulamak ama rapor içinde inner join ile hepsini birleştirip sonuçları basmak acaba daha fazla performans sağlar mı sağlamaz mı...


Biraz daha detaya inmek gerekirse...

Tablo yapısı alttaki şekilde ve tüm id alanları primary key olarak auto increment ve unique olarak tanımlı
sozlesmeler
  id  => 'ID No',
  ad  => 'Ad',
  musteri  => 'Müşteri ID No',
  islemtarihi  => 'Sözleşme Tarihi',
  islem  => 'Sözleşme Tipi',
  apid  => 'Ürün',
  tip  => 'Ürün Tipi',
  tutar  => 'Tutar'

taksitler 
  id  => 'ID No',
  sozlesme  => 'Sözleşme ID No',
  musteri  => 'Müşteri ID No',
  tarih  => 'İşlem Tarihi',
  vade  => 'Vade Tarihi',
  borc  => 'Borç Bakiyesi',
  alacak  => 'Alınan Bakiye',
  kalan  => 'Kalan Bakiye'

cariislemler
  id  NOT NULL,
  taksit  => 'Taksit No',
  musteri  => 'Müşteri ID No',
  tarih  => 'İşlem Tarihi',
  islem  => 'İşlem Tipi',
  tutar  => 'Tutar',
  onay  => 'Onay Durumu',
  onaylayan  => 'Onaylayan',
  onaytarihi  => 'Onay Tarihi',
  odeme  => 'Ödeme Şekli',
  hesap  => 'Banka Hesabı'
Olabilecek en basit bir standart rapor sorgusu ise alttaki şekilde ama bu dediğim gibi en basit sorgulardan birisi diğerleri biraz daha kompleks olanları var...
select s.ad,s.islemtarihi,s.islem,t.vade,t.borc,t.alacak,t.kalan,m.ad,m.tcno from taksitler as t left join sozlesmeler as s on s.id=t.sozlesme left join musteriler as m on m.id=t.musteri where s.alici!='0' and s.sozlesmetipi='0' and s.islem='Kira' and t.durum='0' and s.durum='0' and s.tip='P' and t.vade>=1452636000 and t.vade<=1452895199 and t.kalan>0 order by t.vade

.
Şimdi konunun özetine tekrar gelirsek; şu anda tüm veriler kendilerine ait tekil tablolardalar ve normalization mantığında gidiyorum ki böylesi kullanım açısından bana daha mantıklı geliyor ancak yarın öbür gün bu tablolardaki kayıtlar milyonlara ulaştığında

1- Sistemdeki kullanıcılardan birisi bir müşterinin hesabını açıpta sözleşmelerini sorguladığında milyon tane kayıt olan tek bir tabloda mı sorgu yapmak daha hızlı olur yoksa 500.000'er tane kayıt olan a_tipi_sözleşmeler/b_tipi_sözleşmeler şeklinde 2 farklı tabloda mı yapmak daha hızlı olur
2- 500.000'er 2 tablo yap böl derseniz de örnek verdiğim sorgudaki gibi bir rapor almak istediğimde önce inner join ile a_tipi_sözleşmeler/b_tipi_sözleşmeler tablolarını vs birleştirmem gerekecek, bu performans açısından +/- ne gibi bir durum oluşturur?
Inner Join ile View oluşturulması şart zaten,

Her yıl içerisinde geçmiş yıllara ait verilerin sürekli bir ihtiyacı yok ise geçmiş yılların verilerinide sorgu içerisine almazsın ama bunları belli periyotlarda sorgulatıp raporunu geçici bir tabloda tutarsın ve rapor listeleteceğinde bu tablodaki alınmış toplam değerleri verirsin böylelikle her seferinde veritabanına gidip sorguyu çekmez ama güncelleme işlemide yanına koyarsın 1 kere bu işlem güncellenir sistematik olarak ve güncellenen veriden gelen rapor ayrı bir tabloda tuttuğunda hiçbir problem olmaz.

Özetle,

Örneğin 2015 yıl içerisindeki raporlarını alıp bir tabloda tutarsın.

2014
2013 için bu şekilde gider,

bulunan yıl içerisinde sürekli görmek isteniyorsa genel rapor. bunuda belirli periyotlarda güncelleme talimatı verilir. sorun hallolur

Amaç kısaca sql server'e her seferinde yüklü select sorgusu göndermemek.

İhtiyaç olan bilgide değişimin güncellemenin ne zaman yapıldığı tespit edilirse buna göre şekillendirirsin hocam.