ich wissen muß, wenn es ein bester Weg, diese Art von DB-Modell zu optimieren:Allgemeine SQL Modelloptimierung Frage (MySql)
Hier sind meine Tabellen:
[category]
idCategory
name
[postCategory] (a post can be in more than 1 category)
idCategory
idPost
[post]
idPost
post
[comment]
idComment
idPost
inputDate
comment
Ich werde haben, Zeigen Sie alle Beiträge einer bestimmten Kategorie innerhalb eines bestimmten Zeitraums an (die Zeit stammt von "Kommentaren"). Der Zeitbereich ist fest (1 Tag, 1 Woche, 1 Monat, 1 Jahr). Hier ist, was ich kam mit:
SELECT DISTINCT(post.idPost), post.post
from post
INNER JOIN comment ON post.idPost = comment.idPost
INNER JOIN postCategory ON postCategory.idPost = post.idPost
WHERE postCategory.idCategory = <myCategoryId>
AND comment.inputDate >= <today - time range>
Lassen Sie sagen, dass ich wünschte, 10k Beiträge und 500k Kommentare zu unterstützen ... Gibt es eine Möglichkeit, dies zu optimieren (außer Verwendung von Indizes)? Würden Sie eine gespeicherte Prozedur, eine Abfrage mit temporären Tabellen verwenden, fügen Sie "vorberechnete" Felder irgendwo hinzu ...?
Vielen Dank! :)
FWIW, Ihre Verwendung von DISTINCT (post.idPost) weist auf ein häufiges Missverständnis hin, dass DISTINCT nur für eine Spalte gilt. Das ist falsch - es gilt immer für das gesamte Tupel, das von der Auswahlliste zurückgegeben wird, egal ob Sie Klammern verwenden oder nicht. Das hängt nicht mit Ihrer Frage zusammen, es ist nur ein FYI. –