Top
Phpuniverset logo
 

INDHOLD

Forside

Job annoncer

Tips og Tricks

Konkurrence

Downloads

Dokumenter

PHP bog shop

Forum

Online udviklere


Propelcom

ARTIKLER

CSS

Diverse

E-handel / annoncer

Grafik

Html

Internet

Javascript

Linux

PHP/MySQL

Programmer

Flash

Søgemaskiner

Windows

C / C++


INFO

Information

Annoncering

Kontakt

Optimér søgehastigheden i MySQL

Forside Kategori PHP/MySQL Optimér søgehastigheden i MySQL




 

En artikel om indeksering i MySQL


Hvad er et index?
Et index er en organiseret version af en kolonne i ens tabel. MySQL kan bruge dette til hurtigt at finde de relevante rækker. Hvis en kolonne er indekseret kan MySQL finde de relevante rækker uden at skulle læse dem alle igennem, hvilket er hvad MySQL skal gøre hvis ikke kolonnen er indekseret.

Af indeks-muligheder findes bl.a.
Normal-indeks:
Det normale index er de mest normale.

Unikke-indeks:
Unikke-indeks er helt de samme som normale-indeks, blot med den ene undtagelse at der ikke må være to ens værdier i kolonnen.

Her udover findes der også full-text-index’er.

At indekserer de korrekte kolonner:
De kolonner der vil vinde en effektivitet ved en indeksering er dem du bruger i din where clause. Et eks.
”SELECT * FROM table WHERE tid > NOW()”
Her vil det være korrekt at indeksere kolonnen tid, da det er denne kolonne der bliver tjekket i under select statement’en.
Det kunne nu være fristende blot at indeksere alle kolonner i tabellen, for at forøge sin søgehastighed, men der er også andre ting at tage højde for. En select statement som denne:
”SELECT * FROM table WHERE tid like “%01-01” vil ikke gøre brug af et index og vil dermed ikke vinde nogen effektivitet ved en indeksering, derimod vil: ”SELECT * FROM table WHERE tid like “2004-01%” bruge et index.

Hvis du har en ide om hvilke felter der skal indekseres, men ikke er helt sikker, så kan du tilføje et index og lade MySQL analysere dette. MySQL har en indbygget funktion der kan dette, syntaksen for denne funktion er simpel:
”EXPLAIN select statement”, et eks. “EXPLAIN SELECT id FROM table WHERE forumid=2 AND status=1”.
MySQL vil nu returnere en tabel med to rækker
I den øverste række står der nogle ’navne’:

Table: Dette felt fortæller os navnet på tabellen, hvilket bliver vigtigt med ved brug af store ’joins’. Idet der her vil optræde flere tabeller, vil hver tabel have hver sin række.

Type: Hvis denne værdi står til ’all’ og der ikke prøves på at vælge de fleste tupler i tabellen, så har MySQL søgt igennem alle rækkerne, hvilket ikke er meningen. Problemet kan løses ved at tilføje nogle flere indekser.

possible_keys: MySQL giver her et forslag til et muligt navn til indekset, hvis man blot lader feltet til navnet være tomt vil indekset få navnet fra den første indekserede kolonne, hvilket ikke er særlig beskriveligt.

key: Denne viser hvilket index MySQL bruger. Hvis værdien er tom eller NULL betyder det at MySQL ikke bruger noget index.

key_len: Størrelsen af indekset der bliver brugt.

ref: Denne viser navnet på kolonnen eller ordet “const” som MySQL vil bruge til at udvælge rækkerne.

rows: Antallet af rækker som MySQL tror den skal gennemgå for at vide det korrtekt antal rækker, det bedste man kan opnå her er ”1”.

Extra: I dette felt kan der være flere forskellige oplysninger, mest om hvad der vil give en effekt i ens query.

Hvilke ulemper er der ved at indeksere?
Indekser tager plads i databasen, rigtig meget plads, derfor er det også vigtigt ikke at indeksere unødvendige kolonner. En hver mulig indeksering i en stor tabel kan resulterer i at index-filen vil blive meget stor langt større end data-filen.
Queries der skriver til MySQL, såsom DELETE, UPDATE og INSERT statements bliver langsommere. MySQL skal med et index ikke blot skrive til data-filen, men også index-filen.

Skrevet af: ahv@it.dk



Skrevet af: ahv@it.dk| Dato : 2004-02-18 11:3 | Læst : 9271 gange | Print

Din kommentar og karakter til artiklen

Din karakter:

1

2

3

4

5

6

7

8

9

10

Kommentar:

Log ind for at give en karakter og kommentar.

Kommentarer og karakterer til artiklen

 

Send Artikel/anmeldelse til: phpuni@phpuniverset.dk

Tilbage til oversigt

FORUM

Nyeste forum indlæg :

PHP/Opencart import module

Opencart/php import modul hjælp

Lækkert kontor / kontorfællesskab i Helsingør

Opdatering af PHP

Vurdering af hjemmeside

Nyeste forum svar :

Joomla som CMS

Android programmering

Grafik problemer

Prissammenligningsside

Jeg yder fremover ikke support!

 

MEDLEM

LOGIN ER IKKE MULIGT, MENS VI LAVER NYT SITE
 

NYHEDSBREV

Nyhedsbrev

Tilmeld dig vores nyhedsbrev og modtag nyheder om nye scripts og tips samt om mange andre nye tiltag på Phpuniverset.dk


 

© Copyright 2000 Propelcom Phpuniverset's politik om personlige oplysninger, artikler & Koder Phpuniverset er optimeret til Mozilla 1024 * 768 Phpuniverset version: 3.0 beta
Webhost : Ignesco.dk - android talk & help

Bund