/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
nySQL, indeksering, hvad er det?
Fra : Jakob Munck


Dato : 12-11-05 13:50

På mit webhotel (web10) kræves det, at "alle kolonner der søges på i en
database/tabel bør være indekserede". Hvad betyder det???

www.web10.dk/help/faq/mysql_speed

Jeg har aldrig hørt om database "indeksering" før, så giv mig venligst en
forklaring.

v.h.
Jakob Munck



 
 
Michael Zedeler (12-11-2005)
Kommentar
Fra : Michael Zedeler


Dato : 12-11-05 14:30

Jakob Munck wrote:
> På mit webhotel (web10) kræves det, at "alle kolonner der søges på i en
> database/tabel bør være indekserede". Hvad betyder det???
>
> www.web10.dk/help/faq/mysql_speed
>
> Jeg har aldrig hørt om database "indeksering" før, så giv mig venligst en
> forklaring.

http://en.wikipedia.org/wiki/Index_%28database%29

Mvh. Michael.
--
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Jonas Pedersen (12-11-2005)
Kommentar
Fra : Jonas Pedersen


Dato : 12-11-05 15:04

Jakob Munck wrote:
> På mit webhotel (web10) kræves det, at "alle kolonner der søges på i en
> database/tabel bør være indekserede". Hvad betyder det???

Hvis du har noget SQL hvor du laver noget i stil med "where navn =
'Jonas';" og der ikke er index på navn kolonnen, så skal hele tabellen
scannes igennem.

Er der derimod index på kolonnen navn kan databasen nøjes med at gå ned
og se i indexet og finde den/de rækker der skal findes. Dette er mange
gange hurtigere (specielt ved lidt større datamængder) end at scanne
hele tabellen igennem, da data i et index er sorteret så databasen ved
hvor den skal se efter en bestemt værdi.


--
Jonas Pedersen - jonas(a)chown.dk
http://chown.dk & http://pictureshow.dk
Nyheder på din windows desktop? http://rss.chown.dk

Jakob Munck (12-11-2005)
Kommentar
Fra : Jakob Munck


Dato : 12-11-05 15:23

> Er der derimod index på kolonnen navn kan databasen nøjes med at gå ned og
> se i indexet og finde den/de rækker der skal findes. Dette er mange gange
> hurtigere (specielt ved lidt større datamængder) end at scanne hele
> tabellen igennem, da data i et index er sorteret så databasen ved hvor den
> skal se efter en bestemt værdi.
>

Som jeg forstår det (?) drejer det som om at lave en eller flere ekstra
kolonner i tabellen og disse kolonner skal være "index". Men der er ikke en
sådan valgmulighed, når man laver nye kolonner i MyPHPAdmin, så enten er det
en mangel ved dette interface, eller også har jeg ikke forstået det.

Hvordan - helt konkret - laver jeg et index på en tabel i mySql/myPhpAdmin ?

Er et sådant index noget man kan se når man viser tabellens data, eller
ligger det bare usynligt i baggrunden?

Har det noget med id-nummeret at gøre?

v.h.
Jakob



Jonas Pedersen (12-11-2005)
Kommentar
Fra : Jonas Pedersen


Dato : 12-11-05 16:23

Jakob Munck wrote:
>>Er der derimod index på kolonnen navn kan databasen nøjes med at gå ned og
>>se i indexet og finde den/de rækker der skal findes. Dette er mange gange
>>hurtigere (specielt ved lidt større datamængder) end at scanne hele
>>tabellen igennem, da data i et index er sorteret så databasen ved hvor den
>>skal se efter en bestemt værdi.
>>
>
>
> Som jeg forstår det (?) drejer det som om at lave en eller flere ekstra
> kolonner i tabellen og disse kolonner skal være "index". Men der er ikke en
> sådan valgmulighed, når man laver nye kolonner i MyPHPAdmin, så enten er det
> en mangel ved dette interface, eller også har jeg ikke forstået det.

Man laver ikke flere kolonner på tabellen. Man vælger at lave et index
på en eller flere allerede eksisterende kolonner.

> Hvordan - helt konkret - laver jeg et index på en tabel i mySql/myPhpAdmin ?

Når du står på siden med din tabel-struktur i phpMyAdmin er der mulighed
for at lave/rette/slette indexer på den givne tabel.

> Er et sådant index noget man kan se når man viser tabellens data, eller
> ligger det bare usynligt i baggrunden?

Det er ikke noget du kan se når du hiver data ud af tabellen. Det er
udelukkende for at opnå bedre performance.

Der står iøvrigt et udemærket afsnit om det i mySQL manualen
(http://dev.mysql.com/doc/refman/5.0/en/optimizing-database-structure.html).


--
Jonas Pedersen - jonas(a)chown.dk
http://chown.dk & http://pictureshow.dk
Nyheder på din windows desktop? http://rss.chown.dk

Jakob Munck (12-11-2005)
Kommentar
Fra : Jakob Munck


Dato : 12-11-05 16:54

jeg kigger på det. Tak for vejledningen.

v.h.
Jakob



Jens Gyldenkærne Cla~ (12-11-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 12-11-05 16:15

Jakob Munck skrev:

>> Er der derimod index på kolonnen navn kan databasen nøjes med
>> at gå ned og se i indexet og finde den/de rækker der skal
>> findes. Dette er mange gange hurtigere (specielt ved lidt
>> større datamængder) end at scanne hele tabellen igennem,

Man skal dog huske at et indeks ikke hjælper noget hvis man søger
med trukering fra start. En forespørgsel som følgende:

   SELECT * FROM personer WHERE navn LIKE '%anders%'

- kan ikke drage nytte af et indeks, fordi det der søges efter
(strengen "anders") ikke behøver at stå i starten af feltet.

> Som jeg forstår det (?) drejer det som om at lave en eller
> flere ekstra kolonner i tabellen

Nej - det har du misforstået. Et indeks oprettes direkte på et felt
(~ en kolonne). Det svarer ret godt til indekset i en bog - hvis
man fx skal finde en opskrift på banankage i en kogebog, er det
mange gange hurtigere at kigge i indekset og finde sidetallet på
opskriften end det er at bladre alle bogens sider igennem.

Databasen bruger indeks på samme måde - hvis du fx har indekseret
feltet postnr, har databasen en hurtig måde at finde frem til de
poster der har et bestemt postnr.


> Hvordan - helt konkret - laver jeg et index på en tabel i
> mySql/myPhpAdmin ?

Tag et kig på artiklen her:
<http://www.databasejournal.com/features/mysql/article.php/10897_1382791_1>
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408920
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste