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/