Öncelikle yanıt veripte yardımcı olacak arkadaşlara şimdiden teşekkür ederim...
2 sene önce bir firma için yaptığım bir intranet sistemi var ve şu ana kadar sorunsuz çalışıyor sadece bu 2 senede çıkan bazı eksiklikler tespit ettik bunları da üzerine eklemek yerine sıfırdan bir alt yapı ile yapalım daha temiz olur diye düşündük, bu noktada size sormak istediğim bir performans sorusu var...
Şu anda ki mysql yapısı alttaki gibi;
Müşteriler -> 7.000 Kayıt
Sözleşmeler -> 24.000 Kayıt
Taksitler -> 180.000 Kayıt
Cari İşlemler -> 450.000 Kayıt
Gördüğünüz gibi 2 senede ciddi bir kayıt oluştu ve bu oran giderek artacak... Bu firmanın esasen 2 ana ürünü var ben tablo yapısını alttaki gibi yapsam;
A_tipi_Sözleşmeler
B_tipi_Sözleşmeler
A_tipi_Taksitler
B_tipi_Taksitler
Diğer_Taksitler
A_tipi_Cari İşlemler
B_tipi_Cari İşlemler
Diğer_Cari İşlemler
ve bu sayede kayıtları daha az satırlar olarak 3'er alt tabloya bölmüş olsam bunun bana performans açısından bir faydası olur mu, olursa da ciddi anlamda mı olur yoksa o kadar az olur ki uğraşmaya bile gerek yok mu dersiniz?
Bir de bu tablolardan bazen öyle raporlar alınıyor ki sorgu süresi bile 2dk'yı bulduğu oluyor; Örn. 7k müşterinin tamamının sözleşme detayları onların alt taksitleri ve o taksitlere yapılan ödemelerin detayları ve bu detaylara bağlı olarak hesaplanan ödeme performansı gibi, böyle durumlarda mecburen veriyi inner join ile alıp birleştirmem gerekecek...
Siz tahminen ne demek istediğimi 3 aşağı 5 yukarı anlamışsınızdır, sizce performans açısından bu yukarıda anlattığım şekilde tabloları 3'er parçaya bölüp gerektiğinde inner join ile almak mantıklı mı yoksa hiç bulaşma böyle teker tablo daha mı mantıklı performans açısından? Soruya cevap verirken kayıt sayısının önümüzdeki 2-3 yılda bazı tablolarda 1-1.5 milyon civarına çıkacağını da hesaba katarsanız çok sevinirim...
Performans artışını sorgularını düzelterek çözüme kavuşturabilirsin.
Yani Veritabanında bir tablodaki verilerin hepsi gerekli değilse. sadece gerekli olan alanları sınırlandırarak sorgularını bu şekilde azaltmalısın,
A tipi B tibi taksitlerin türünü farklı tabloda tutuyorsan
Örneğin :
TaksitTipi
ID :
TaksitTipAdı
şeklinde
bu tarz aynı verileri aynı veritabanında barındırıyorsanda bunları tek tabloya toparlamanı ve id değeri vermeni öneririm veritabanındaki verileri şişirmenin pek bi anlamı yok bu konuda,
İhtiyacına göre detaylı bi şekilde tablonun analiz edilmesi gerekiyor. projeyi göz önüne alıp bakılmadan sadece bunları söyleyebilirim.
Ama temel kural sorgulardaki gereksiz kullanmadığın verileri getirtmemek.