Skip to content
This repository has been archived by the owner on Nov 3, 2023. It is now read-only.

DC_Table Filter Timestamp Optimierung #8485

Closed
Mynyx opened this issue Sep 14, 2016 · 8 comments
Closed

DC_Table Filter Timestamp Optimierung #8485

Mynyx opened this issue Sep 14, 2016 · 8 comments
Assignees
Labels
Milestone

Comments

@Mynyx
Copy link
Contributor

Mynyx commented Sep 14, 2016

In DC_Table werden zur Generierung eines Filters nach Datum sämtliche verschiedene Timestamps aus der Datenbank abgerufen.

Tatsächlich benötigt werden jedoch nur sämtliche verschiedene Datumsangaben.

Ändert man so beispielsweise die Abfrage SELECT DISTINCT tstampFROM tl_log in `SELECT DISTINCT UNIX_TIMESTAMP(FROM_UNIXTIME(`tstamp` , '%Y-%m-%d')) AS `tstamp` FROM `tl_log verkürzt sich die Skriptlaufzeit bei großen Tabellen um mehrere Sekunden.

@leofeyer leofeyer added this to the 3.5.17 milestone Sep 15, 2016
@leofeyer leofeyer removed the defect label Sep 20, 2016
@leofeyer leofeyer removed this from the 3.5.17 milestone Sep 20, 2016
@leofeyer
Copy link
Member

Das kann ich nicht nachvollziehen. Bei mir dauert die Unix-Zeitstempel-Umwandlung deutlich länger:

@leofeyer
Copy link
Member

@contao/developers @KaiserCh /cc

@KaiserCh
Copy link

Ja, der DB Query dauert signifikant länger, aber andererseits ist die Ergebnismenge auch deutlich kleiner. Ich hab hier z.B. ein Log, das nur Werte von einem Tag enthält, aber davon eben einige hundert Stück. Der alte Code hat den schnelleren Query, gibt dafür aber auch einige hundert Ergebnisse. Der langsamere Code bringt ein einzelnes Ergebnis.
Bei sehr intensiv genutzten Projekten mit tausenden Log-Einträgen in wenigen Tagen ist es durchaus möglich, dass der SQL-Zeitverlust geringer ist, als die PHP-Laufzeit, die durch gesparte Schleifen frei wird.
Beispiel, 4000 Log-Einträge in 4 Tagen:
Variante 1: 4000 Foreach-Durchläufe in DC_Table
Variante 2: 4 Durchläufe

Ziemlich grenzwertig. Wirklich Power kriegt man da nur durch einen Wechsel weg von tstamp-Integern hin zu echten Dates, aber das fällt hier flach.

@Mynyx
Copy link
Contributor Author

Mynyx commented Sep 20, 2016

Die Skriptlaufzeit verkürzt sich, da anschließend erheblich weniger Datensätze verarbeitet werden müssen.

Die Laufzeit der Datenbankabfrage selbst verkürzt sich nicht.

@leofeyer
Copy link
Member

Ziemlich grenzwertig. Wirklich Power kriegt man da nur durch einen Wechsel weg von tstamp-Integern hin zu echten Dates, aber das fällt hier flach.

Vielen Dank für Deine Analyse. Das mit den Date-Feldern sehe ich genauso wie Du.

Die Skriptlaufzeit verkürzt sich, da anschließend erheblich weniger Datensätze verarbeitet werden müssen.

Ich mache dazu auch nochmal einen Test.

@Mynyx
Copy link
Contributor Author

Mynyx commented Sep 20, 2016

Der Vorteil bei der Skriptlaufzeit liegt ungefähr bei einer Sekunde pro 100.000 Datensätze (verteilt über mehrere Monate) in tl_log.

Vermutlich wird man da bei 892 Datensätzen noch keinen Unterschied messen können.

@leofeyer leofeyer added this to the 4.3.0 milestone Oct 6, 2016
@leofeyer
Copy link
Member

leofeyer commented Oct 6, 2016

Wie in Mumble am 6. Oktober besprochen, wollen wir diese Optimierung implementieren. Allerdings müssen wir berücksichtigen, dass wir nicht nur Tag-Filter haben, sondern auch Monat und Jahr.

@leofeyer leofeyer added defect and removed feature labels Oct 21, 2016
@leofeyer leofeyer modified the milestones: 3.5.18, 4.3.0 Oct 21, 2016
@leofeyer leofeyer self-assigned this Oct 21, 2016
@leofeyer
Copy link
Member

Implementiert in ce20bee.

jsonn pushed a commit to jsonn/pkgsrc that referenced this issue Oct 27, 2016
### 4.2.5 (2016-10-27)

 * Unlock members after password change (see contao/core#8545).
 * Register an alias for the language fallback page model (see
   contao/core#8544).
 * Correctly calculate the maximum length of tl_files.name (see
   contao/core#8536).
 * Correctly add the headline if a content element is versionized (see
   contao/core#8502).
 * Optimize the DCA sorting filter for date fields (see contao/core#8485).
 * Do not show version entries of deleted files (see contao/core#8480).
 * Redirect the empty URL depending on language and alias name (see
   contao/core#8498).
 * Apply `specialchars()` to widget attributes (see contao/core#8505).
 * Queue the requests when rebuilding the search index (see contao/core#8449).
 * Correctly determine the form field names in the file manager (see #600).
 * Correctly show the maximum file size in the form upload widget (see #595).
 * Correctly encode e-mail addresses in the text element (see #594).
 * Do not parse front end templates twice (see #599).
 * Correctly set host and scheme in the URL generator (see #592).
 * Correctly reload the page and file trees in "edit multiple" mode.
 * Correctly normalize the paths in the symlink command.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

3 participants