Stellen Sie sich vor, Sie haben einen Tisch POSTS mit 50 Millionen Posts. Diese Tabelle hat:Vermeiden Sie Joins oder nicht?
ID, POST, CATEGORY_ID
1, "Hello world", 2
Und dann haben Sie eine Tabelle Kategorien mit:
ID, CATEGORY_NAME
1, "Football"
2, "Baseball"
Auf der Website listen Sie diese Beiträge in ORDER DESC, die Post und den Kategorienamen zeigt, die einen Join.
[Baseball]
Hello World!
Ich denke über das Hinzufügen die CATEGORY_NAME Spalte auf die BEITRäGEN Tabelle, um zu vermeiden, (wenn jemand einen neuen Beitrag erstellen) zu, dass jedes Mal machen JOIN erhalte ich einen Besuch ab.
In der Reihenfolge der Leistung, ist eine gute Idee? Stellen Sie sich vor, Sie haben täglich 10.000.000 Besucher (hoffentlich :))
Auf der anderen Seite würde ich gerne wissen, welche DB-Engine halten Sie dafür besser, mysql? Mariadb? Mongodb?
EDIT:
ein reales Szenario Stellen Sie sich vor: Ich brauche 3 POST zu zeigen, verbindet + KATEGORIE + USER_NAME.
POSTS: 50 million rows
CATEGORIES: 100 rows
USERS: 10 million rows
Option A) Join zwischen den drei Tabellen zu zeigen:
[Baseball]
Hello World
- By John
Option B) Hinzufügen von 2 Spalten (CAT_NAME, USER_NAME) varchar (25) Tisch, um an Beiträgen der Verbindung zu vermeiden.
"Ich denke darüber nach, die Spalte CATEGORY_NAME in die POSTS-Tabelle einzufügen (wenn jemand einen neuen Beitrag erstellt), um zu vermeiden, dass ich jedes Mal, wenn ich einen Besuch erhalte, einen JOIN mache." - das würde "Denormalisierung" heißen - Wenn Sie kein Leistungsproblem gemessen haben, tun Sie es nicht. –
Die Kategorietabelle klingt ziemlich klein, daher sollte der Leistungseinfluss minimal sein (im Grunde In-Memory-Hash-Lookup). Wenn es ein Problem gibt, würde ich das Caching untersuchen (insbesondere weil sich die Kategorienamen wahrscheinlich nur sehr selten ändern) vor der Denormalisierung. – Thilo
Aber in der Theorie sollte es bei hohem Traffic schneller sein, oder? Ich aktualisiere Hauptpost mit einem zweiten Szenario. –