/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL5: Index på unixtime-datofelt.
Fra : Kasper Johansen


Dato : 23-01-06 12:28

Hej gruppe.


Jeg forsøger at lave et index på en tabel, der indeholder en masse
gallerigrupper.

Tabellen er efterhånden godt fyldt op, og kan i nogle forspørgsler sløve
lidt.

Hvis jeg laver en normal forspørgsel (uden index), får jeg at vide at
der er mange tusind rækker (via EXPLAIN).


Jeg laver herefter et index på dato-feltet, og udfører samme EXPLAIN på
det. Jeg får at vide, at der nu kun er 2-3 rækker.

Jeg prøver herefter at lave en EXPLAIN SELECT med brug af funktionen
FROM_UNIXTIME(). Nu står der igen, at databasen selecter de samme flere
tusinde rækker.

Umiddelbart duer følgende syntaks ikke:
ALTER TABLE galleritabel ADD INDEX (FROM_UNIXTIME('%d %m %y', dato))


Er det overhovedet muligt at bruge index sammen med sådanne funktioner?
Hvis ja - Hvordan?


Jeg bruger MySQL 5.0 på Debian "testing" med PHP 5,1.


--
Med venlig hilsen
Kasper Johansen

 
 
Peter Brodersen (23-01-2006)
Kommentar
Fra : Peter Brodersen


Dato : 23-01-06 13:13

On Mon, 23 Jan 2006 12:28:29 +0100, Kasper Johansen
<kaspernj@gmail.com> wrote:

>Jeg prøver herefter at lave en EXPLAIN SELECT med brug af funktionen
>FROM_UNIXTIME(). Nu står der igen, at databasen selecter de samme flere
>tusinde rækker.

Du kan ikke lave et index på en funktion af et felt, og mysql bruger
heller ikke indexes ved felter brugt i funktioner, som du har opdaget.

Typisk handler det om at flytte det indekserede felt for sig selv i en
sammenligning og flytte det andet led af udsagnet ind i en passende
funktion. Hvis dit felt ligger som et timestamp, kan du benytte
UNIX_TIMESTAMP():

Følgende vil ikke bruge et index:
... WHERE FROM_UNIXTIME(tidsfelt) = '2006-01-23 13:08:28'

Det vil følgende derimod:
... WHERE tidsfelt = UNIX_TIMESTAMP('2006-01-23 13:08:28')

Derudover betragter jeg det lidt som en uskik at benytte sig af unix
timestamps, når databasen selv har mere fleksible typer for at bevare
tid og dato.

--
- Peter Brodersen
Find dig selv: http://map.ter.dk/

Søg
Reklame
Statistik
Spørgsmål : 177458
Tips : 31962
Nyheder : 719565
Indlæg : 6408173
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste