Avatar billede spiri Nybegynder
03. april 2001 - 14:33 Der er 9 kommentarer og
2 løsninger

Forklaring på index

Er der en der kan forklare hvad indeksering af en MySQL database er?

Jeg har prøvet at forstå denne artikel:
http://www.phpbuilder.com/columns/tim20010110.php3

Men eksemplet er lavet med en PostgreSQL, så jeg kan ikke lige overføre det til MySQL. (Sikkert fordi jeg er for dum!!)

Jeg har denne tabel indeholdende 80.000 CD\'er:

CREATE TABLE varer (
  id int(20) NOT NULL auto_increment,
  varenr varchar(25),
  stregkode varchar(25),
  kunstner varchar(200),
  komponist varchar(200),
  titel varchar(200),
  medie varchar(20),
  dato varchar(20),
  pris int(10) DEFAULT \'0\' NOT NULL,
  PRIMARY KEY (id)
);

Hvor man kan søge på kunstner, titel og komponist.

Hvis jeg nu skal indeksere denne tabel hvordan gør jeg så?

...og er det overhovedet nødvendigt når jeg kun har denne ene tabel?
Avatar billede top Nybegynder
03. april 2001 - 14:35 #1
Mener du at sortere output efter fx, kunstner, titel og til sidst komponist?
Avatar billede spiri Nybegynder
03. april 2001 - 14:38 #2
Nej, nej.

Det er selve tabellen der skal rettes i for at den skal indekseres (tror jeg nok). Det skulle give en hurtigere søgning
Avatar billede top Nybegynder
03. april 2001 - 14:39 #3
sorry :-(
Avatar billede spiri Nybegynder
03. april 2001 - 14:49 #4
Der er da helt iorden :-)
Avatar billede kobbernagel Nybegynder
03. april 2001 - 15:04 #5
Det er meget godt med en index i dette tilfælde.
Hvis du nu har flere cd\'er med den samme kunstner, ville en søgning på ham gå hurtigere, da en indexseret database kun ville have linkene til de records der indeholder det kunstner navn. Ex. \"tv2\" ville måske indeholde \"1,34,645,666,678\" og på den måde slipper du at søge alle 80.000 cd\'er igennem.

CREATE INDEX kunstner ON cd_database (name(10));
er syntaxen for at oprette index.
Avatar billede stig3 Mester
03. april 2001 - 15:07 #6
Efter hans mening:
CREATE INDEX mytable_categoryid_userid_adddate
    ON mytable (category_id,user_id,adddate);

omformet:
CREATE INDEX varer_kunstner_titel_komponinst
        ON varer(kunstner, titel, komponist);

SELECT * FROM varer
    WHERE kunstner=\"frans\" and titel=\"bomdefanger\"
    ORDER BY \"komponist\" DESC;

Jeg ved ikke om det er MySQL syntax
Avatar billede spiri Nybegynder
03. april 2001 - 15:09 #7
dvs, index\'et skal IKKE indgå i min SQL forespørgsel?

Måske et dumt spørgsmål :)
Avatar billede stig3 Mester
03. april 2001 - 15:11 #8
nej det gør den selv

men du opretter de index\'es som query optimiseren (den der behandler din select) så bruger.
Avatar billede spiri Nybegynder
03. april 2001 - 15:16 #9
Lige et sidste spørgsmål:

Kan jeg oprette flere index\'es på samme tabel, dvs:
1 på kunstner
1 på titel
1 på komponist


eller giver dette ingen mening?
Avatar billede stig3 Mester
03. april 2001 - 15:29 #10
Meget fed artikel du der havde gang i forøvrigt.

Det kunne godt give mening, men det kommer an på hvilke forespørgsler du regner med at bruge.

Det er normalt at lave index på fremmed nøglerne, da der tit laves join med disse. Jeg ved så ikke om MySQL automatisk laver index på primær nøglen, men ellers kan man gøre det.

Gutten med artiklen foreslår desuden at lave index der bruger flere felter, som i det ovenstende eksempel, men brug det kun hvis det er en ofte forekommende forespørgsel.
Avatar billede spiri Nybegynder
03. april 2001 - 15:35 #11
Jamen det er jo også Tim Perdue der har skrevet den, og han er vel det tætteste man kommer på en php-rockstjerne næst efter Rasmus Lerdorf!

Indtil videre rykker den info jeg har fået nu, så mange tak for hjælpen.

Jeg prøver lige det med flere index\'es.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester