Durum: 113 şarkının HİÇBİRİNDE bitrate verisi yok (NULL)
Kullanım: Sadece ConvertToHLSJob içinde fallback değer olarak kullanılıyor (varsayılan: 256 kbps)
extractMetadata() Metodu: Bitrate çıkarma kodu var ama hiç çalıştırılmamış
✅ Öneri: Silinebilir - ConvertToHLSJob içinde sabit 256 kbps kullanılabilir
Durum: 113 şarkının HİÇBİRİNDE metadata yok (NULL)
Amaç: sample_rate, channels, channel_mode, filesize, mime_type bilgilerini saklamak için planlanmış
extractMetadata() Metodu: Kodu hazır ama hiç çalıştırılmamış
✅ Öneri: Silinebilir - Kullanılmıyor ve kullanılması da planlanmıyor
Durum: 205 şarkının TÜMÜnde NULL (boş)
Amaç: HLS AES-128 encryption key saklamak için oluşturulmuş
encryption_iv: Dolu (her şarkı için benzersiz IV), ama key yok!
🚨 Sistem Tasarım Hatası: IV var, KEY yok - Şifreleme çalışmıyor!
⚠️ Seçenek 1: Encryption sistemini düzelt (key üret ve sakla)
✅ Seçenek 2: Encryption tamamen kaldırılacaksa → encryption_key SİLİNEBİLİR
Durum: 205 şarkıda DOLU (her şarkı için benzersiz IV)
Sorun: encryption_key NULL olduğu için encryption çalışmıyor!
🚨 Yarıda Bırakılmış Sistem: IV var, KEY yok!
⚠️ Seçenek 1: Encryption sistemini tamamla (key ekle)
✅ Seçenek 2: Encryption kaldırılacaksa → encryption_iv SİLİNEBİLİR
Durum: 205 şarkının HEPSİ is_encrypted = 1
Gerçek: encryption_key NULL olduğu için ASLINDA ENCRYPTİON YOK!
🚨 Yanıltıcı Flag: Encrypted diyor ama şifrelenmiş değil!
⚠️ Seçenek 1: Encryption sistemini düzelt (is_encrypted = 0 yap veya gerçekten şifrele)
✅ Seçenek 2: Encryption kaldırılacaksa → is_encrypted SİLİNEBİLİR
Durum: 205 şarkının HİÇBİRİNDE timestamp yok (NULL)
Amaç: HLS conversion zamanını saklamak (audit log)
hls_converted Flag: Conversion durumunu gösteriyor (1 = converted)
💡 İkisi de aynı işi yapıyor: hls_converted (boolean) yeterli
✅ Öneri: Timestamp gerekli değilse SİLİNEBİLİR - hls_converted yeterli
📊 Mevcut Durum:
is_active (tekli) + is_active, deleted_at (composite)is_featured (tekli) + is_featured, is_active, deleted_at (composite)play_count (tekli) + play_count, is_active, deleted_at (composite)album_id (tekli) + album_id, is_active, deleted_at (composite)genre_id (tekli) + genre_id, is_active, deleted_at (composite)created_at (tekli) + is_active, deleted_at, created_at (composite)updated_at (tekli) - HİÇ KULLANILMIYOR!deleted_at (tekli) + birçok composite içindeduration (tekli) - HİÇ KULLANILMIYOR!hls_converted (tekli) - HİÇ KULLANILMIYOR!🔍 Analiz:
✅ Composite indexler YETER! (leftmost prefix rule)
MySQL/MariaDB composite index sola hizalı prefix kuralı ile çalışır.
Örnek: INDEX(is_active, deleted_at, created_at)
Bu index şu sorguları karşılar:
➜ Tekli is_active index GEREKSIZ!
🗑️ Silinebilecek Tekli İndexler:
is_active → Composite içinde varis_featured → Composite içinde varplay_count → Composite içinde vardeleted_at → Soft delete index (Laravel otomatik), composite içinde varcreated_at → Composite içinde varupdated_at → HİÇ KULLANILMIYORduration → HİÇ KULLANILMIYORhls_converted → HİÇ KULLANILMIYOR⚠️ DİKKAT: album_id & genre_id
Foreign key constraint nedeniyle otomatik index oluşturulmuş olabilir.
Composite index zaten var:
album_id, is_active, deleted_atgenre_id, is_active, deleted_at✅ Tekli index silinebilir (composite yeterli)
✅ Temiz tablo - gereksiz kolon yok
• 13 kolon (tümü kullanılıyor)
• Virtual columns: title_tr/en/ar_lower
✅ Temiz tablo - gereksiz kolon yok
• 12 kolon (tümü kullanılıyor)
• Virtual columns: title_tr/en/ar_lower
✅ Temiz tablo - gereksiz kolon yok
• 12 kolon (tümü kullanılıyor)
• Virtual columns: title_tr/en/ar_lower
✅ Temiz tablo - gereksiz kolon yok
• 9 kolon (tümü kullanılıyor)
• Description eklendi (2025-11-10)
✅ Temiz tablo - gereksiz kolon yok
• 13 kolon (tümü kullanılıyor)
• is_system, is_public, is_radio flags
✅ Temiz tablo - gereksiz kolon yok
• 8 kolon (tümü kullanılıyor)
• Minimal yapı (title, slug, media_id)
Kesin Silinecekler:
bitrate - NULL (hiç kullanılmamış)metadata - NULL (hiç kullanılmamış)Şartlı Silinecekler (Encryption):
encryption_key - NULL (sistem yarıda bırakılmış)encryption_iv - Dolu ama key olmadan işlevsizis_encrypted - Yanıltıcı (gerçekte encrypt yok)İsteğe Bağlı:
hls_converted_at - Timestamp gerekliyse koruBeklenen Kazanç: ~20% tablo boyutu azalması
Composite tarafından karşılanan tekli indexler:
is_activeis_featuredplay_countcreated_atdeleted_atHiç kullanılmayan indexler:
updated_atdurationhls_convertedBeklenen Kazanç: ~15% index boyutu azalması, INSERT/UPDATE hızlanması
🚨 Mevcut Durum: Yarıda bırakılmış encryption sistemi!
Seçenek A - Encryption Sistemini Tamamla:
Seçenek B - Encryption Sistemini Kaldır:
💡 Öneri: Seçenek B (Kaldır)
Token-based chunk URL sistemi zaten çalışıyor ve yeterli koruma sağlıyor. Encryption ek karmaşıklık yaratıyor.
6 kolon + gereksiz indexler kaldırılınca
Her INSERT'ta 8-10 index güncellenmeyecek
Query planner daha az index değerlendirecek
Leftmost Prefix Rule: Composite index sola hizalı prefix kuralı ile çalışır.
INDEX(A, B, C) bu sorguları karşılar:
➜ Tekli INDEX(A) GEREKSIZ!
Composite Index Avantajları:
bitrate - Hiç kullanılmıyor (NULL)metadata - Hiç kullanılmıyor (NULL)hls_converted_at - Audit log ise gerekli olabilirencryption_key, encryption_iv, is_encrypted✅ muzibu_songs tablosunda 6 gereksiz kolon ve 8-10 yedekli index tespit edildi
✅ Diğer Muzibu tabloları temiz durumda
⚡ Temizleme sonrası beklenen performans artışı: ~25%
🚨 Encryption sistemine strateji kararı gerekli (Tamamla veya Kaldır)
💡 Öncelikli adım: bitrate & metadata kolonlarını sil