webForumDet fria alternativet

Hur ska man förbättra strukturen?

Databaser & SQLur Databashanterare & SQL

11 svar · 375 visningar · startad av ampy

Medlem sedan feb. 20011 498 inlägg
Frågan#1

Har denna struktur i tabellen forum.

last - int(11)
id - int(11)
id_svar - int(11)
skribent - varchar(50)
subject - text
meddelande - text
datum - varchar(50)
typ - varchar(50)
rum - varchar(50)
datum2 - datetime
skribent_id - int(11)
locked - varchar(50)
senasteinlagg - varchar(19)
ampymail - varchar(50)

Tabellen forum innehåller nu över 8000 poster och jag känner att foumet har blivit mer segladdat den senaste tiden. Beror säkert på att det har kommit fler poster.

Men hur kan man förbättra denna strukur så att forumet laddas snabbare. Ska man använda index eller något?

Medlem sedan feb. 20012 412 inlägg
#2

Hej!

Jag hade brutit ut topics från själva meddelandena.

RED:

ex:

-- topics --

threadId
subject
date
...

-- message --

messid
threadid
message
...
...

mvh Jörgen HP

Medlem sedan maj 200010 687 inlägg
#3

Det hade inte jag gjort. :)

Medlem sedan feb. 2000280 inlägg
#4

Uttömmande svar Erik...

Medlem sedan feb. 20012 412 inlägg
#5

Erik Juhlin skrev:

Det hade inte jag gjort. :)

Eftersom det räcker att en (1) post i tråden innehåller subjektraden bör man bryta tabellen till två. Om man vill följa normaliseringsreglerna vill säga. :)

Medlem sedan maj 200010 687 inlägg
#6

Första inlägget i en tråd är ju också en tråd så därför bör den ligga i samma tabell. Och svar kan också ha rubriker, wF har det ju t.ex.
Sen skulle man kunna bygga upp det i en trädstruktur där man även kan svara på svar om man vill. Då har man ett parentid som pekar på föräldern och som är NULL när det är en rot.

Att använda en tabell förenklar också när man ska söka eller ta reda på senaste inlägg i en tråd. :)

Medlem sedan juni 20019 024 inlägg
#7

Det beror ju också mycket på hur SQL frågorna ställs. Oftast ser man ju frågor i stil med "SELECT * FROM tabell" för att sedan hämta/redigera/ta bort rätt post med ADO/recordset.

Erik Juhlin skrev:

Första inlägget i en tråd är ju också en tråd så därför bör den ligga i samma tabell. Och svar kan också ha rubriker, wF har det ju t.ex.

wF är uppbyggt kring den struktur som Jörgen säger. ;)
Trådar separerade från inläggen är bäst, anser jag. Varför? Jo, eftersom trådarna innehåller en del info som inte har med inläggen att göra (antal visningar, vilket forum det tillhör, eventuell ikon, klistrad/avklistrad om man har sådana funktioner etc).

ampy skrev:

Men hur kan man förbättra denna strukur så att forumet laddas snabbare. Ska man använda index eller något?

Index och primärnycklar är att föredra, det snabbar ju upp hämtningen av varje inlägg till en viss tråd.

Använd EXPLAIN-syntaxen för att analysera resultatet av en SELECT-fråga också. Där får man värdefull info hur joins, index och data används.

Medlem sedan feb. 20012 412 inlägg
#8

Pace skrev:

Det beror ju också mycket på hur SQL frågorna ställs. Oftast ser man ju frågor i stil med "SELECT * FROM tabell" för att sedan hämta/redigera/ta bort rätt post med ADO/recordset.

Erik Juhlin skrev:

Första inlägget i en tråd är ju också en tråd så därför bör den ligga i samma tabell. Och svar kan också ha rubriker, wF har det ju t.ex.

wF är uppbyggt kring den struktur som Jörgen säger. ;)
Trådar separerade från inläggen är bäst, anser jag. Varför? Jo, eftersom trådarna innehåller en del info som inte har med inläggen att göra (antal visningar, vilket forum det tillhör, eventuell ikon, klistrad/avklistrad om man har sådana funktioner etc).

Bra, då slapp jag säga vad jag skulle. :)

Medlem sedan maj 200010 687 inlägg
#9

Ah, ok... De har trådar i en tabell, men första inlägget i tråden ligger inte i den tabellen utan i inläggstabellen..? :)

Medlem sedan juni 20019 024 inlägg
#10

Ja, precis.

Alla inlägg som tillhör en tråd betraktas som inlägg - oavsett ordning. Du skulle kunna ta bort ampys första inlägg, och det skulle fortfarande bli en tråd. Kanske inte lika lyckad, men ändå. ;)

Medlem sedan feb. 20011 498 inlägg
#11

Pace skrev:

Index och primärnycklar är att föredra, det snabbar ju upp hämtningen av varje inlägg till en viss tråd.

Använd EXPLAIN-syntaxen för att analysera resultatet av en SELECT-fråga också. Där får man värdefull info hur joins, index och data används.

Jag har endast index och primärnyckel för id, räcker inte det eller ska man ha för alla kolumner?

Hur använder man EXPLAIN-syntaxen?

Sen om jag har fattat det rätt så ska man alltså ha alla inlägg i en tabell. Även det första. Sen i den andra tabellen ska man ha alla trådar med information som antal svar, besök, om den är låst m.m

Stämmer det?

Medlem sedan sep. 20001 124 inlägg
#12

ampy skrev:

Hur använder man EXPLAIN-syntaxen?

EXPLAIN SELECT * FROM Vartsomhelst WHERE MumsigBärs='Guinnes';

140 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)