webForumDet fria alternativet

Indexera - när och var?

2 svar · 357 visningar · startad av spango

spangoMedlem sedan juni 20008 205 inlägg
#1

Jaha, ja... när ska man egentligen indexera en kolumn? Jag har förstått att indexering generellt sett gör insättning långsammare, men sökning snabbare.
Om vi nu har en hypotetisk tabell över personer, med en kolumn för heltal som funkar som identifierare, en kolumn för förnamn, en för efternamn, en för yrke, en för e-postadress, en för telefonnummer, en för personens livshistoria och så vidare.
Fortsätt att anta, att vi i användargränssnittet till denna databas har följande två funktioner:

- Sök efter person: Sök på förnamn och/eller efternamn, e-post eller telefonnummer.
- Titta på information om person: Visa det vi har i databasen om en person, identifiera genom räknarkolumnen. SELECT * FROM Person WHERE PersonID=<nummer>;, typ.

Vilka kolumner bör man indexera egentligen? De man ofta söker i, dvs namn, e-postadress, telefonnummer och id, eller bara id, som utan tvekan kommer bli den mest eftersökta av dessa kolumner?
Frågorna har uppstått medans jag pysslat med mySQL, men är av generell karaktär - de är inte direkt relaterade till det jag sysslar med.

Sammanfattning:
Finns det några allmängiltiga grundregler för indexering?

\r Det är mänskligt att fela...

------------------
Crying tears of lead
spangoman - back from the dead!

[Redigerat av spango den 01 feb 2001]

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Det blri ju alltid en avvägning om man vill prioritera sökning eller uppdateringar. Nu har du ju inte sagt något om hur mycket trafik och hur mycket data du har, men en sak är att kostnaden för att uppdatera index kanske inte är så stor som man förväntar sig. För skojs skull så gjorde jag ett enkelt test där jag gjorde insert på 10000 rader i en tabell med en primärnyckel vilket tog 3 sekunder. Samma operation i en tabell med 4 stycken extra sekundärindex tog 7 sekunder. (Mätningen är inte gjord med Mysql).
När det gäller index så är en sak är att man inte behöver indexera en kolumn om man har definerat den som primärnyckel eller unique. Om man har ett sammansatt index på kolumnerna A och B så är det ingen ide heller att lägga till ett index enbart på A.
Ytterligare en sak att tänka på är ju vilka typer av frågor man ställer, t.ex så kan man inte utnyttja ett index om ger ett villkor som
where namn like '%abc%'

------------------
essentitia preter non sans multiplicandum

spangoMedlem sedan juni 20008 205 inlägg
#3

Tackar, det dög bra.

------------------
Crying tears of lead
spangoman - back from the dead!

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