Avatar billede nemlig Professor
30. december 2008 - 20:21 Der er 8 kommentarer og
1 løsning

Vejledning til indeksering

Jeg vil gerne gøre mine tabeller lidt hurtigere og har derfor lavet nogle indeks. Jeg har forstået det sådan, at det som hovedregel vil være fornuftigt, at lave index på de felter, hvorpå jeg anvender "WHERE" - altså "SELECT.....WHERE.felt1...". Dvs. på felt1!
Men så er jeg i tvilv om nogle detaljer:
Jeg anvender phpMyAdmin og vælger "Dan et indeks på [1] kolonne.
Jeg vælger et tilfældigt "indeksnavn" og vælger indekstype "Index".
Og så vælger jeg det ønskede Feltnavn.

Hvad skal jeg skrive i "størrelse"?
Og hvis jeg nu vil lave indeks på fx. 10 forskellige felter, skal jeg så oprette 10 indeks - altså ét på hvert felt eller skal jeg "Dan et indeks på [ 10 ] kolonner" og derunder vælge de 10 felter?
Avatar billede arne_v Ekspert
30. december 2008 - 20:27 #1
Size kan du bare lade være med at udfylde for små data typer. For store data typer
som BLOB eller TEXT angiver du hvor mange bytes der skal bruges i index.
Avatar billede arne_v Ekspert
30. december 2008 - 20:30 #2
Normalt vil du lave 10 index hvert på et felt.

Du bruger et index på flere felter, hvis de altid følges ad.

Hvis du altid bruger WHERE F1=X AND F2=Y og aldrig kun WHERE F1=X eller WHERE F2=Y,
så kan du bruge det.

Det er sjældent tilfældet.

Man kan så også bruge det hvis man har et multi felt foreign key eller skal have et unikt
index på 2 felter.

Men for normalt performance optimering så er index på 1 felt normalt helt fint.
Avatar billede nemlig Professor
30. december 2008 - 20:42 #3
Din sidste sætning er jeg ikke helt med på.

Jeg har fx. en tabel, som består af ca. 40 forskellige felter og ca. 1000 poster.
Jeg har så noget forskelligt PHP-kode, som laver forskelle SELECTS.

KODE 1 fx. de poster, som WHERE felt1 > 100
KODE 2 fx. de poster, som WHERE felt2 < 200

Altså 2 forskellige koder, som søger på forskellige felter.
Skal jeg ikke lave indeks på både felt1 og felt2?
Og da jeg har 5 forskellige koder, som søger på forskellige felter, skal jeg vel lave indeks på de felter, som der søges på, og dermed måske 5 indeks, hvis det er 5 forskellige felter, der søges på.
Avatar billede nemlig Professor
30. december 2008 - 20:47 #4
Og kan du svare på, hvordan jeg i PHP laver en IF på et felt, som ikke har "NULL" værdien:

if($row['date_fak'] != 'NULL') {

Så forhøjer jeg lige pointene.
Avatar billede nemlig Professor
30. december 2008 - 20:52 #5
Jeg fik det sidste til at virke med

if($row['date_fak'] != NULL) {
Avatar billede arne_v Ekspert
30. december 2008 - 20:54 #6
Ja - 5 index, men kun på 1 felt hver.
Avatar billede arne_v Ekspert
30. december 2008 - 20:54 #7
I SQL skal man bruge WHERE f IS NOT NULL, men i PHP kan du sikkert godt sammneligne med null.
Avatar billede nemlig Professor
30. december 2008 - 21:04 #8
OK Arne - tusind tak for de gode svar.
Send venligst et svar.
Avatar billede arne_v Ekspert
30. december 2008 - 21:04 #9
komemr 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