Avatar billede mjansen Seniormester
08. august 2016 - 10:33 Der er 9 kommentarer og
1 løsning

Datatype og Hastighed

Hej

Jeg har et system som logger data.
PT. har jeg 42829092 rækker.

Min tabel indeholder:
LogTime_ID (int) # tæller minutter siden systemt blev sat i gang....
Input_ID (int) # hvilket input data kommer fra
Value (float) # Værdien
Value_5m (float) #Middel over 5 min
Value_15m
Value_1h
Value_1d

Dette system virker fint!

Nu vil jeg så lave et nyt system hvor LogTime_ID bliver erstattet med DatoTid (DATETIME)

Har kopieret alle data over i det nye stystem.

Men hvis jeg så laver en simple SQL:
SELECT Value FROM LogInput WHERE LogInput.Input_ID = '2' && DatoTid >= '08-08-2016' && DatoTid <= '08-08-2016' ORDER BY LogInput.DatoTid

Tager det næsten 1 minut at afvikle.
Er det pga DATETIME?
Skal jeg bruge TIMESTAMP i stedet ?
Avatar billede michael_stim Ekspert
08. august 2016 - 10:37 #1
Du skal nok bare indexere din tabel.
Avatar billede mjansen Seniormester
08. august 2016 - 10:58 #2
Jeg har index på (DatoTid, Input_ID) (UNIQUE)

Både i den gamle og nye tabel.

Hvis du mener noget andet så håber jeg du vil uddybe det.
Avatar billede mjansen Seniormester
08. august 2016 - 11:20 #3
Jeg har nu prøvet med et tidsrum hvor der skulle være data men får bare et tomt resultat, når tiden er gået...

Har prøvet med between med samme problem.

Har så prøvet at rette SQL til:
SELECT * FROM LogInput WHERE LogInput.Input_ID = '2' && DatoTid > '01-01-2016' ORDER BY LogInput.DatoTid

SÅ kommer der 3103134 rækker på 0,0012 sekunder.

tilføjer jeg:
&& DatoTid <= '02-01-2016'

Så tager det 51 sekunder og 0 rækker
Avatar billede michael_stim Ekspert
08. august 2016 - 11:30 #4
Og du er sikker på der er nogen 01-01-2016?

Vil du have hele den 2. med skal du välge:

DATE(DatoTid) <= '02-01-2016' eller DatoTid <= '02-01-2016 23:59:59'
Avatar billede mjansen Seniormester
08. august 2016 - 11:38 #5
fejlen fundet :-)

det er forkert formatering af dato!!!

Skal jo være 2016-01-01 og ikke 01-01-2016!!!
Avatar billede arne_v Ekspert
08. august 2016 - 13:49 #6
Hvad programmerings sprog bruger du? PHP? C#? Java?
Avatar billede mjansen Seniormester
08. august 2016 - 14:03 #7
php, hvorfor?
Avatar billede arne_v Ekspert
08. august 2016 - 14:53 #8
I langt de fleste sprog kan man helt undgaa problemet med dato formatering ved at bruge prepared statement og simpelthen give et datetime objekt som parameter.

Men lige netop i PHP kan man ikke.
Avatar billede mjansen Seniormester
08. august 2016 - 19:01 #9
ok takker
Avatar billede arne_v Ekspert
09. august 2016 - 00:44 #10
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester