Søger du en specifik kategori?

 



Oprettet ons. d. 25. februar 2009 kl. 11:41

ahv
ahv (85.788 point)
Guidens karaktér
1
2
3
4
5

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.


En bruger på eksperten.dk har udtalt:
" Det er en kunst at vælge korrekt - eller er det en videnskab?"

- AHV

Skrevet man. d. 12. januar 2004 kl. 14:40| #1

md_craig (17.001 point)
Synes godt man kan lave en artikel en del mere dybdegående end dette...
Det kan godt være den hjælper folk der ved hvad Indeksering er, men for resten er det bare spildt tid...

Skrevet tir. d. 13. januar 2004 kl. 22:39| #2

arne_v (1.016.094 point)
Indeholder præcis hvad synopsis lover: en beskrivelse af indeksering i MySQL.

Skrevet ons. d. 14. januar 2004 kl. 04:52| #3

janbb (15.468 point)
Tupler - er det noget alle kender ? men da lang og måske oplysende for nogen der beskæftiger sig med problemerene i udstrakt grad i forvejen.

Skrevet ons. d. 14. januar 2004 kl. 17:29| #4

googolplex (33.718 point)
Udmærket artikel, hvis man vil have et hurtigt indblik i hvad indexes er for en størrelse - hvad er en tupel i øvrigt?

Skrevet søn. d. 18. januar 2004 kl. 03:12| #5

jeg fik da noget ud af den, men jeg har heller ikke rodet meget med indexes.

Skrevet søn. d. 18. januar 2004 kl. 19:30| #6

mathiash (14.719 point)
God artikler, vidste ikke at man kunne optimere med indexes :)

Skrevet søn. d. 18. januar 2004 kl. 19:31| #7

sandbox (50.355 point)
Der står ikke noget, jeg ikke kunne have set i MySQL-manualen, men her er det på dansk. Og det er godt forklaret.

Skrevet man. d. 19. januar 2004 kl. 00:00| #8

exp (44.015 point)
michaelkjeldsen.com
Interessant artikel, men der mangler en lidt "blødere" del, der fortæller mig, hvorfor lige præcis jeg skal benytte mysql-indeksering.

Skrevet man. d. 19. januar 2004 kl. 01:42| #9

detox (69.442 point)
En ganske udemærket, kortfattet og præcis introduktion til begerebet indeksering.

Skrevet man. d. 19. januar 2004 kl. 19:47| #10

fangel (35.454 point)
Kunne godt være stillet pænere op - men godt indhold... skal man nok få brug får hvis man vil noget seriøst med MySQL

Skrevet man. d. 19. januar 2004 kl. 20:31| #11

thesurfer (107.875 point)
Jeg har ingen erfaring med MySQL, men artiklen er en start.. det virker godt nok som om, ahv har presset en masse info ned i en kort artikel..

Skrevet man. d. 19. januar 2004 kl. 22:07| #12

udemærket artikel og fint forklaret :)

Skrevet tir. d. 20. januar 2004 kl. 18:32| #13


Skrevet tor. d. 11. marts 2004 kl. 13:14| #14

skwat (25.826 point)
tuple = række = record = dem der ligger vandret!

Ellers ok!

Skrevet tor. d. 08. april 2004 kl. 18:00| #15

trer (32.597 point)
Fin artikel.

Skrevet ons. d. 13. oktober 2004 kl. 15:23| #16

zkn (18.238 point)
Jeg giver den 60 phanhatte ud af 2.

Skrevet fre. d. 22. april 2005 kl. 20:39| #17


Skrevet tor. d. 07. juli 2005 kl. 14:08| #18

seeker (13.655 point)
Fin artikel.
Lidt huller (Full-tekst, "joints", generelt kort forklaret)
Lidt lavere niveau end titlen ligger op til. Title skulle måske ha være "Brugen af Index i MySQL"

Skrevet fre. d. 25. november 2005 kl. 08:00| #19

dustie (15.310 point)
Okay info, men det virker som om det er skrevet af en der selv lige har læst det. Altså ikke som om forfatteren har det store overskud til at forklare hvad alt betyder.

Skrevet tir. d. 13. juni 2006 kl. 14:41| #20

it-dyret (16.246 point)
Ok... men 30 sekunder på Google giver meget bedre og dybere artikler

Skrevet søn. d. 06. juli 2008 kl. 22:16| #21

superfisker (7.750 point)
Kender til "gratis" artikler som forklarer dette bedre...

Skriv en kommentar



Mest populære guides

Guidens karakter
!!!Karaktér: 3
14 stemmer
31/01 - 2011
Af: heinzdmx

Dropbox - gratis online lagerplads

Jeg vil i denne guide forklare lidt om hvad Dropbox er og også hvordan du får mest mulig plads på Dropbox. Dropbox er kort sagt en service hvor du har dine data lagt til backup på både nettet og din egen computer.
Guidens karakter
!!!Karaktér: 4
33 stemmer
02/02 - 2009
Af: jkrons

Dato- og tidsberegninger i Excel

En introduktion til simple beregninger med dato og tid i Excel. Opdateret med afsnit om beregning af tillæg.
Excel  |  Læs »
Guidens karakter
!!!Karaktér: 4
21 stemmer
06/11 - 2011
Af: fromsej

Sådan fjerner du virus og malware

Udviklingen går stærkt på "skidt"fronten, så vi har sammensat en ny og effektiv programpakke til fjernelse af det.
Virus  |  Læs »

Log ind

   

   



   




Tips & Tricks fra PC World

Teaser billede

Top 5: Virale YouTube-videoer fra Danmark

Lægger du mærke til de mere eller mindre skjulte reklamebudskaber, når du ser videoer på nettet? Vi har taget et kig på fem utrolige danske videoer, som er blevet virale hit.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan fupper smarte svindlere dig på Facebook

Se hvordan du undgår Facebook-fup i fremtiden.


Nyheder fra Computerworld

Teaser billede

App-udvikling 2.0: Sådan er den perfekte app

ComputerViews: Den værste app-hype er ved at have lagt sig, og nu ser vi konturerne af fremtidens app-design. Men hvordan udnytter man de mobile muligheder optimalt?


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger