Hallo
Ich brauche dies folgende View um die Zeiten zu berechnen. Die Query selber funktioniert nicht schlecht.
Wenn ich die ersten 30 (aus 50'000) Datensätze abfrage, dann dauer die Antwort ca. 0.0012 Sekunden. (PhpMyAdmin Mysql 5)
Wenn ich aber eine Gruppierung pro Tag und User vornehme dann habe ich die Antwort Zeiten von 0.37 Sekunden. Das ist zu langsam.
Könnt ihre bitte mal die Query anschauen? Wie kann ich diese verbessern?...
....
arbeitszeit.gs AS gs,
arbeitszeit.ge AS ge,
((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause) AS Netto,
(CASE
WHEN ((arbeitszeit.szeit >= arbeitszeit.gs) AND (arbeitszeit.ezeit <=
arbeitszeit.ge) AND (Find_In_Set(DayOfWeek(arbeitszeit.arbzstart),
arbeitszeit.awochenprofil) > 0) AND (arbeitszeit.arbszart <> 'Feiertag'))
THEN ((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause)
WHEN ((arbeitszeit.szeit < arbeitszeit.gs) AND (arbeitszeit.ezeit >
arbeitszeit.gs) AND (arbeitszeit.ezeit <= arbeitszeit.ge) AND
(Find_In_Set(DayOfWeek(arbeitszeit.arbzstart), arbeitszeit.awochenprofil) >
0) AND
(arbeitszeit.arbszart <> 'Feiertag')) THEN
((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.gs)) / 3600) -
arbeitszeit.arbzpause)
WHEN ((arbeitszeit.szeit >= arbeitszeit.gs) AND (arbeitszeit.szeit <
arbeitszeit.ge) AND (arbeitszeit.ezeit > arbeitszeit.ge) AND
(Find_In_Set(DayOfWeek(arbeitszeit.arbzstart), arbeitszeit.awochenprofil) >
0) AND
(arbeitszeit.arbszart <> 'Feiertag')) THEN
((Time_To_Sec(TimeDiff(arbeitszeit.ge, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause) ELSE 0 END) AS IST,
(CASE
WHEN ((arbeitszeit.szeit < arbeitszeit.gs) AND (arbeitszeit.ezeit >
arbeitszeit.gs) AND (arbeitszeit.ezeit <= arbeitszeit.ge) AND
(Find_In_Set(DayOfWeek(arbeitszeit.arbzstart), arbeitszeit.awochenprofil) >
0) AND
(arbeitszeit.arbszart <> 'Feiertag')) THEN
(Time_To_Sec(TimeDiff(arbeitszeit.gs, arbeitszeit.szeit)) / 3600)
WHEN ((arbeitszeit.szeit >= arbeitszeit.gs) AND (arbeitszeit.szeit <
arbeitszeit.ge) AND (arbeitszeit.ezeit > arbeitszeit.ge) AND
(Find_In_Set(DayOfWeek(arbeitszeit.arbzstart), arbeitszeit.awochenprofil) >
0) AND
(arbeitszeit.arbszart <> 'Feiertag')) THEN
(Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.ge)) / 3600)
WHEN ((arbeitszeit.szeit < arbeitszeit.gs) AND (arbeitszeit.ezeit <
arbeitszeit.gs) AND (Find_In_Set(DayOfWeek(arbeitszeit.arbzstart),
arbeitszeit.awochenprofil) > 0) AND (arbeitszeit.arbszart <> 'Feiertag'))
THEN ((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause)
WHEN ((arbeitszeit.szeit > arbeitszeit.ge) AND (arbeitszeit.ezeit >
arbeitszeit.ge) AND (Find_In_Set(DayOfWeek(arbeitszeit.arbzstart),
arbeitszeit.awochenprofil) > 0) AND (arbeitszeit.arbszart <> 'Feiertag'))
THEN ((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause)
WHEN ((Find_In_Set(DayOfWeek(arbeitszeit.arbzstart),
arbeitszeit.awochenprofil) = 0) OR
(arbeitszeit.arbszart = 'Feiertag')) THEN
((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause) ELSE 0 END) AS Ue,
If((arbeitszeit.arbszart = 'Kompensation'),
((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause), 0) AS Komp,
....
Antwortzeiten ca. 0.0012 Sek
SELECT a.arbzid AS arbzid,
a.arbzusrid AS arbzusrid,
a.abszpensum AS abszpensum,
a.abszsollstd AS abszsollstd,
CAST(a.arbzstart AS date) AS Tag,
a.arbszart AS arbszart,
Sum(a.arbzpause) AS Pause,
(Sum(a.IST) - a.abszsollstd) AS PM,
Sum(a.IST) AS IST,
Sum(a.Ue) AS UEB,
Sum(a.Netto) AS Netto,
a.arbzstart AS arbzstart
FROM view_detailstest a
GROUP BY a.arbzusrid,
CAST(a.arbzstart AS date)
Anwortzeiten 0,37
Danke für jeden Hinweis..
mpol_ch
Ich brauche dies folgende View um die Zeiten zu berechnen. Die Query selber funktioniert nicht schlecht.
Wenn ich die ersten 30 (aus 50'000) Datensätze abfrage, dann dauer die Antwort ca. 0.0012 Sekunden. (PhpMyAdmin Mysql 5)
Wenn ich aber eine Gruppierung pro Tag und User vornehme dann habe ich die Antwort Zeiten von 0.37 Sekunden. Das ist zu langsam.
Könnt ihre bitte mal die Query anschauen? Wie kann ich diese verbessern?...
....
arbeitszeit.gs AS gs,
arbeitszeit.ge AS ge,
((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause) AS Netto,
(CASE
WHEN ((arbeitszeit.szeit >= arbeitszeit.gs) AND (arbeitszeit.ezeit <=
arbeitszeit.ge) AND (Find_In_Set(DayOfWeek(arbeitszeit.arbzstart),
arbeitszeit.awochenprofil) > 0) AND (arbeitszeit.arbszart <> 'Feiertag'))
THEN ((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause)
WHEN ((arbeitszeit.szeit < arbeitszeit.gs) AND (arbeitszeit.ezeit >
arbeitszeit.gs) AND (arbeitszeit.ezeit <= arbeitszeit.ge) AND
(Find_In_Set(DayOfWeek(arbeitszeit.arbzstart), arbeitszeit.awochenprofil) >
0) AND
(arbeitszeit.arbszart <> 'Feiertag')) THEN
((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.gs)) / 3600) -
arbeitszeit.arbzpause)
WHEN ((arbeitszeit.szeit >= arbeitszeit.gs) AND (arbeitszeit.szeit <
arbeitszeit.ge) AND (arbeitszeit.ezeit > arbeitszeit.ge) AND
(Find_In_Set(DayOfWeek(arbeitszeit.arbzstart), arbeitszeit.awochenprofil) >
0) AND
(arbeitszeit.arbszart <> 'Feiertag')) THEN
((Time_To_Sec(TimeDiff(arbeitszeit.ge, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause) ELSE 0 END) AS IST,
(CASE
WHEN ((arbeitszeit.szeit < arbeitszeit.gs) AND (arbeitszeit.ezeit >
arbeitszeit.gs) AND (arbeitszeit.ezeit <= arbeitszeit.ge) AND
(Find_In_Set(DayOfWeek(arbeitszeit.arbzstart), arbeitszeit.awochenprofil) >
0) AND
(arbeitszeit.arbszart <> 'Feiertag')) THEN
(Time_To_Sec(TimeDiff(arbeitszeit.gs, arbeitszeit.szeit)) / 3600)
WHEN ((arbeitszeit.szeit >= arbeitszeit.gs) AND (arbeitszeit.szeit <
arbeitszeit.ge) AND (arbeitszeit.ezeit > arbeitszeit.ge) AND
(Find_In_Set(DayOfWeek(arbeitszeit.arbzstart), arbeitszeit.awochenprofil) >
0) AND
(arbeitszeit.arbszart <> 'Feiertag')) THEN
(Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.ge)) / 3600)
WHEN ((arbeitszeit.szeit < arbeitszeit.gs) AND (arbeitszeit.ezeit <
arbeitszeit.gs) AND (Find_In_Set(DayOfWeek(arbeitszeit.arbzstart),
arbeitszeit.awochenprofil) > 0) AND (arbeitszeit.arbszart <> 'Feiertag'))
THEN ((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause)
WHEN ((arbeitszeit.szeit > arbeitszeit.ge) AND (arbeitszeit.ezeit >
arbeitszeit.ge) AND (Find_In_Set(DayOfWeek(arbeitszeit.arbzstart),
arbeitszeit.awochenprofil) > 0) AND (arbeitszeit.arbszart <> 'Feiertag'))
THEN ((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause)
WHEN ((Find_In_Set(DayOfWeek(arbeitszeit.arbzstart),
arbeitszeit.awochenprofil) = 0) OR
(arbeitszeit.arbszart = 'Feiertag')) THEN
((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause) ELSE 0 END) AS Ue,
If((arbeitszeit.arbszart = 'Kompensation'),
((Time_To_Sec(TimeDiff(arbeitszeit.ezeit, arbeitszeit.szeit)) / 3600) -
arbeitszeit.arbzpause), 0) AS Komp,
....
Antwortzeiten ca. 0.0012 Sek
SELECT a.arbzid AS arbzid,
a.arbzusrid AS arbzusrid,
a.abszpensum AS abszpensum,
a.abszsollstd AS abszsollstd,
CAST(a.arbzstart AS date) AS Tag,
a.arbszart AS arbszart,
Sum(a.arbzpause) AS Pause,
(Sum(a.IST) - a.abszsollstd) AS PM,
Sum(a.IST) AS IST,
Sum(a.Ue) AS UEB,
Sum(a.Netto) AS Netto,
a.arbzstart AS arbzstart
FROM view_detailstest a
GROUP BY a.arbzusrid,
CAST(a.arbzstart AS date)
Anwortzeiten 0,37
Danke für jeden Hinweis..
mpol_ch