Avatar billede supermand69 Nybegynder
30. januar 2005 - 11:39 Der er 14 kommentarer og
1 løsning

auto increment

Hvis man har et felt med auto_increment. Er det så i ALLE tilfælde mest optimalt at have en primary key på den, eller er der nogle tilfælde hvor det er godt nok bare at have en almindelig index?
Avatar billede arne_v Ekspert
30. januar 2005 - 11:42 #1
Et auto increment felt er jo unikt. En primary key er også altid unik.

Umiddelbart har jeg svært ved at se pointen i 2 unikke felter i samme tabel.
Avatar billede supermand69 Nybegynder
30. januar 2005 - 13:13 #2
gider du lige forklare lidt bedre? er ikke helt med :)
Avatar billede arne_v Ekspert
30. januar 2005 - 13:20 #3
en primær nøgle er unik d.v.s. at den kan bruges til at identificere rækkerne med

et auto increment felt vil også blive unikt og kan derfor også bruges til at identificere rækkerne med

man har vel kun brug for en ting til at identificere rækkerne med

og derfor synes jeg umiddelbart kun at et auto increment felt giver
mening hvsi det er primær nøgle
Avatar billede supermand69 Nybegynder
30. januar 2005 - 13:28 #4
jamen jeg har jo også kun et auto_increment felt i hver table :) jeg ville bare lige vide om det i ALLE tilfælde vil være mest optimalt med en primary key på den?
Avatar billede arne_v Ekspert
30. januar 2005 - 13:56 #5
og mit svar er at jeg ikke har fantasi til at forestille mig, hvornår
man ikke vil have det

NB: Rækkefølgen er normalt at man først finder primary key og så bagefter
    bestemmer om den skal være auto increment eller ej
Avatar billede supermand69 Nybegynder
30. januar 2005 - 14:18 #6
man skal også have primary på felter som referer til en anden table ikk?

men hvis man har flere primary keys i en table bliver de jo delte nøgler...

har fået fortalt at man ikke altid kan søge efter en del af en delt nøgle

eks.
primary key (A, B, C)

man kan godt søge efter A && B && C, det samme med A && B, men ikke med B && C eller bare C
Avatar billede supermand69 Nybegynder
30. januar 2005 - 14:23 #7
ud fra denne query, hvordan ville du så indexere tablen? :)

SELECT debate.id, IFNULL(MAX(debate2.time), debate.time) AS last_time
    FROM $DB.debate debate
    LEFT JOIN $DB.debate debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0
    WHERE debate.topic='$_GET[tab]' && debate.reply_id=0
    GROUP BY debate.thread_id
    ORDER BY last_time DESC

CREATE TABLE `debate` (
  `id` mediumint(7) NOT NULL auto_increment,
  `topic` tinyint(1) NOT NULL default '0',
  `thread_id` mediumint(7) NOT NULL default '0',
  `reply_id` mediumint(7) NOT NULL default '0',
  `user_id` smallint(5) unsigned NOT NULL default '0',
  `time` int(10) NOT NULL default '0',
  `subject` varchar(40) NOT NULL default '',
  `msg` text NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
Avatar billede arne_v Ekspert
30. januar 2005 - 14:42 #8
Felter som refererer til en anden tabel er foreign keys ikke primary keys
Avatar billede arne_v Ekspert
30. januar 2005 - 14:43 #9
Med den query ville jeg putt index på:

topic
thread_id
reply_id
Avatar billede supermand69 Nybegynder
30. januar 2005 - 14:46 #10
hvilken index skal der så på foreign keys? bare en almindelig index?
Avatar billede arne_v Ekspert
30. januar 2005 - 15:10 #11
MyISAM tabeller understøtter ikke foreign keys, d.v.s. at det er bare et koncept,
og derfor er der ikke nødvendugt at sætte indexes på foreign keys.

Af performance hensyn vil man dog typisk sætte index på foreign key
felter.
Avatar billede supermand69 Nybegynder
30. januar 2005 - 17:19 #12
ok

Men jeg er så stadig ikke helt med på hvad den reele forskel er på at bruge primary og index? For primary og unique må jo egentlig være det samme :)
Avatar billede arne_v Ekspert
30. januar 2005 - 17:40 #13
Et index behøver ikke at være unik. Et unikt index ligner meget en primary key.
Men en felt med unikt index kan indeholde NULL i modsætning til en primary key
og du kan have flere unikke index men kun en primary key.
Avatar billede supermand69 Nybegynder
30. januar 2005 - 17:48 #14
jeg tror jeg er ved at have fat i det nu :)

lav et svar
Avatar billede arne_v Ekspert
30. januar 2005 - 17:49 #15
kommer her
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