aslına bakarsan [396 , 521] şeklinde tutmak yeterli iki kolonda çünkü biri arkadaşlığı bitirdigi zaman digeri de otomatikman bitirmiş oluyor , öyle bir durumda veriyi başka bir tabloya transfer edip bunlar eskiden arkadaşmış diye log da tutabilirsin ve arkadaş tablosundan silebilirsin.
(tabi bu aşamada diğer tabloya taşımak ardından silmek maliyetli bir işlem olabilir , onun yerine arkadaşlar tablosuna bir alan koyup statusunu güncelleyerek bunlar arkadaş degil olarak işaretleyebilirsin , sonrada system loadın düşük oldugu saatleri saptayarak o saate bir job koyarsın , batch olarak statusu silinmiş olarak işaretlenenleri silersin)
facebook idleri için bigint ideal gözüküyor ayrıca güzel de bi indexledigin zaman milyonlara kadar yolu var mysql'in pek ses edecegini sanmıyorum üzerinde çok kompleks sorgular yazmayacaksan , gayet iki tabloyu inner join ile efendi efendi birleştirip kullanabilirsin , hatta view bile kullanabilirsin.
Ama böyle bir durumda cross joinden kaçınmak iyi olabilir.
Özetle ben de mutlaka 2. bir tablonun gerekli olduğunu düşünenlerdenim , en azından normalizasyon kuralları da böyle diyor.
Son olarak bu insanların arkadaş listelerini sürekli güncelleyecegini düşünürsek sen de aynısını yapmalısın , bu durumda periyodik olarak ağır sorgular çalıştıracaksın bu tablolarda.
belki aynı dataları farklı bir tablo ile senkronize tutup , production tablosundan sadece select yapılmasını sağlayarak runtime için biraz zaman kazanabilirsin.
0