webForumDet fria alternativet

Optimering av SELECT sats

Databaser & SQL

5 svar · 241 visningar · startad av Pace

Medlem sedan juni 20019 024 inlägg
Frågan#1

Vilket är egentligen "bäst" (dvs, snabbast och mest korrekt) att göra om man exempelvis vill hämta ett inlägg i ett forum + forumets titel:

  1. Hämta först forumets titel (SELECT titel FROM forum WHERE id = 1) och sedan hämta alla inlägg (SELECT användare, inlägg, blaha FROM inlägg WHERE id = 1).
  2. Hämta alla inläggen, med forumets titel "joinad" i select-frågan, så att forumets titel kommer med varje post.

Med metod 1 så hämtar man endast den datan man behöver med 2 st SQL frågor, medan man med metod 2 hämtar all data med endast 1 st fråga, men samtidigt får man med sig onödig information. Så till min fråga: vilket är rätt och snabbast?

Medlem sedan feb. 20012 412 inlägg
#2

men samtidigt får man med sig onödig information.

Varför får du onödig information? Du anger ju bara de fält i joinen du ska använda dig av, eller förstår jag din fråga fel?

Medlem sedan juni 20019 024 inlägg
#3

Man får med sig forumets titel flera gånger (tillsammans med varje post) om man använder sig av en join som jag beskrev i metod 2:

[red]namn på den som postade | inlägget | forumets titel[/red]
Pace | Lite text | Café webforum
Jörgen HP | Mer lite text | Café webforum
LarsG | Ännu mer lite text | Café webforum
Medlem sedan feb. 20012 412 inlägg
#4

Men det är ju knappast SQL-frågans fel. Vill du optimera lite så sparar du bara ett id för forumets titel i den tabellen och har:

forumets titel | forumid | forumbeskrivning

i egen tabell. Är ju dumt att laga samma data på flera ställen. :D

Medlem sedan juni 20019 024 inlägg
#5

Nej, det var inte så jag menade. Som jag skrev i första inlägget:

2. Hämta alla inläggen, med forumets titel "joinad" i select-frågan, så att forumets titel kommer med varje post.

Medlem sedan juni 20008 205 inlägg
#6

Jag röstar för två olika frågor, för det låter mer logiskt... men jag tror inte att det spelar någon större roll. Kanske gör det det om du hämtar Riktigt Många Poster på Samma Gång, eftersom det blir till att skyffla en hel del data. Du kan ju göra ett benchmarktest för att pröva :)

297 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
164 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)