Laravel framework'ü kullanılarak oluşturulmuş bir uygulamam var. Özelliklerinden biri, tablolar arasında polimorfik ilişkiler oluşturma yeteneğidir. Bunu ilgili tablonun kimliğini ve ilgili tablo modelinin tam nitelikli sınıf adını saklayarak yapar. Tahmin edebileceğiniz gibi, bazı girişler model adlarına ve sınıf adlarına bağlı olarak oldukça uzun olabilir.MySQL değişken depolama alanı
Benim senaryoda, 4 tablom var. Polimorfik olan baz masa A
. Tablolar B
, C
ve D
değillerdir.
böyle olmayan polimorfik tablo modelleri için sınıf adları: masanın A
den
LongNamespace\SubNamespace\Something\B
LongNamespace\SubNamespace\Something\C
LongNamespace\SubNamespace\Something\D
Sonuçlar şöyle olacaktır: kayıt başına
id | relation_id | relation_type
--------------------------------
1 | 1 | LongNamespace\SubNamespace\Something\B
2 | 2 | LongNamespace\SubNamespace\Something\C
3 | 5 | LongNamespace\SubNamespace\Something\D
4 | 12 | LongNamespace\SubNamespace\Something\D
5 | 3 | LongNamespace\SubNamespace\Something\B
6 | 6 | LongNamespace\SubNamespace\Something\C
... etc (around 50,000 rows) ...
38 ile bayt olan çoğu tekrarlanır, katma veri, benim sorum, relation_type
sütun deposuna her bir relation_type
sütun deposuna ayrı ayrı bellekte (indekslerle ne olduğunu varsadığımı varsayalım) bir indeks ekleyecek veya onları bir ENUM gibi gruplayacak mı? Toplam depolama alanı, relation_type
numaralı 3 benzersiz girişten oluşuyordu. Bunlar, dahili olarak, bir çeşit hash tablosuyla ilişkilendiriliyor, ergo tasarrufu, n * 38 baytlık alan değerinde.