Avatar billede dennism Nybegynder
10. februar 2007 - 15:57 Der er 13 kommentarer og
1 løsning

mySQL: forkert index?

Jeg har en tabel med denne syntaks:

CREATE TABLE users (
    username varchar(15) NOT NULL,
    password varchar(15) NOT NULL,
  PRIMARY KEY (username),
  INDEX (username,password)
    );

Når jeg I phpmyadmin kigger på strukturen for denne tabel, får jeg denne besked:
PRIMARY og INDEX nøgler burde ikke begge være sat for kolonne `username`

Hvad er problemet?
Avatar billede arne_v Ekspert
10. februar 2007 - 16:00 #1
da en primary key altid er unik, så giver det vel ikke meget mening at have det felt
som en del af et index !?!?
Avatar billede madeindk Nybegynder
10. februar 2007 - 16:03 #2
Nej, lige præcis - det holder ingen steder. Den burde se sådan her ud:

CREATE TABLE users (
    username varchar(15) NOT NULL,
    password varchar(15) NOT NULL,
  PRIMARY KEY (userID),
  INDEX (username,password)
    );
Avatar billede dennism Nybegynder
10. februar 2007 - 16:08 #3
madeindk >>

Hvor får du det userId fra? Jeg har ingen intension om at have et felt med ID, da hver række er unik på username - derfor primary key.

Generelt >>
Vil det sige, at når jeg lavet en kolonne som primary key så indgår den automatisk som et index?
Avatar billede arne_v Ekspert
10. februar 2007 - 16:09 #4
madeindk>

du mangler feltet userid

og jeg kan heller ikke se pointen i det index - det vil være godt til at slå
en bruger og password op, hvis man tillader flere brugere med samme username, men
det gør man jo nok ikke
Avatar billede dennism Nybegynder
10. februar 2007 - 16:17 #5
Min opfattelse af index er, at hvis man har et felt som er et index, så gør det søgetiden hurtigere. Da jeg ved, at jeg i min kode kommer til at skulle sige:
  WHERE username="brugernavn" && password="kodeord"
tænkte jeg, at det nok var smart at lave index på disse to, så det vil blive hurtigere af finde disse.
Hvor meget af dette er forkert?
Avatar billede erikjacobsen Ekspert
10. februar 2007 - 16:28 #6
Du kan nøjes med din primærnøgle, der bruges af dit sql-udtryk til at finde den rigtige brugers række. Der er ingen ekstra gevinst ved at have index på password, da du allerede har den rigtige række.
Avatar billede arne_v Ekspert
10. februar 2007 - 16:35 #7
hvis du kun har en række med samme brugernavn er index på det fint nok

og en primary key har indbygget index
Avatar billede dennism Nybegynder
10. februar 2007 - 16:36 #8
Men hvad så med index på username? Er det der automatisk, når man har set den til primary key?
Avatar billede arne_v Ekspert
10. februar 2007 - 16:55 #9
ja
Avatar billede dennism Nybegynder
10. februar 2007 - 17:06 #10
Tak. Smider I lige nogle svar her? :)
Avatar billede arne_v Ekspert
10. februar 2007 - 17:53 #11
.
Avatar billede dennism Nybegynder
10. februar 2007 - 17:56 #12
Hvad med I to andre?
Avatar billede erikjacobsen Ekspert
10. februar 2007 - 19:28 #13
Nej tak.
Avatar billede madeindk Nybegynder
11. februar 2007 - 01:38 #14
Nej tak, tror jeg tåget lidt for meget der :-)
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