|
| lidt mere om index i mysql Fra : Martin |
Dato : 02-08-01 21:10 |
|
Jeg har læst lidt om index attr. i mysql..
Kan man så ikke bare lave ALLE felter til index så skulle søgningen jo
gå meget hurtigere?
--
Bye for now Martin
http://wizprod.com - Billigt webdesign findes her
http://natten-i.dk - http://kew.natten-i.dk
Email: martini@mailme.dk - admin@natten-i.dk
| |
Troels Arvin (02-08-2001)
| Kommentar Fra : Troels Arvin |
Dato : 02-08-01 22:19 |
|
On Thu, 02 Aug 2001 22:09:37 +0200, "Martin" <martini@mailme.dk> wrote:
> Jeg har læst lidt om index attr. i mysql.. Kan man så ikke bare lave
> ALLE felter til index så skulle søgningen jo gå meget hurtigere?
ALLE felter er en dårlig idé, bl.a. for det forringer performance ved
INSERTs. Men samtidig har jeg hørt folk anbefale, at smide index på en
kolonne, hvis man er i tvivl - så man må gerne være lidt rundhåndet med
dem.
--
Greetings from Troels Arvin, Copenhagen, Denmark
| |
Christian Schmidt (02-08-2001)
| Kommentar Fra : Christian Schmidt |
Dato : 02-08-01 23:56 |
|
Troels Arvin wrote:
>
> "Martin" <martini@mailme.dk> wrote:
> >
> > Jeg har læst lidt om index attr. i mysql.. Kan man så ikke bare lave
> > ALLE felter til index så skulle søgningen jo gå meget hurtigere?
>
> ALLE felter er en dårlig idé, bl.a. for det forringer performance ved
> INSERTs. Men samtidig har jeg hørt folk anbefale, at smide index på en
> kolonne, hvis man er i tvivl - så man må gerne være lidt rundhåndet med
> dem.
Hvis man er i tvivl, kan man checke sine SELECTs med EXPLAIN. Her får
man at vide, hvilke indekser (om nogen) der benyttes.
Betragt et (normalt?) indeks som en sorteret liste over værdierne i én
kolonne (eller flere kolonner for et fler-kolonne-indeks), hvor der for
hver værdi er en angivelse af, hvor på disken resten af rækken er
lagret. Det er superhurtigt at søge i en sorteret liste (kan gøres i
O(log n), dvs. det tager en tid, der er proportionalt med logaritmen til
antallet af elementer).
Bl.a. på baggrund af denne betragtning har jeg en formodning om, at en
SQL-server max. benytter ét indeks pr. tabel ved en SELECT.
Undertiden kan det betale sig at lave fler-kolonne-indekser. Hvis der fx
er to kolonner, som ofte bliver søgt på samtidig, dvs. SELECT * FROM
tabel WHERE a = 3 AND b = 4, da vil det ofte være en fordel at lave ét
indeks over disse to kolonner. Dette indeks vil også kunne bruges, når
man søger på kolonnen a alene (men ikke på b).
Christian
| |
|
|