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?