Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql - Suche nach Zeitstempel nach Tageszeit

Sie könnten die HOUR() Funktion:

SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9

Leider wird die Leistung dieser Abfrage schrecklich sein , sobald Sie über ein paar tausend Zeilen gehen - Funktionen sind nicht indexierbar, daher wird jedes Mal, wenn diese Abfrage ausgeführt wird, ein vollständiger Tabellenscan durchgeführt.

Was wir in einer ähnlichen Situation getan haben:Wir haben eine weitere Spalte updatetime_hour erstellt , indiziert und beim Einfügen gefüllt (und beim Update aktualisiert); dann wird die Abfrage schnell:

SELECT * FROM 'table' WHERE `updatetime_hour` = 9

Ja, wir haben die Daten denormalisiert, und es ist ein bisschen mehr Haushalt, aber ich habe noch keine schnellere Lösung gesehen. (Wir haben Insert- und Update-Trigger berücksichtigt und gemessen, um die updatetime_hour zu füllen ab updatetime , aber wegen Leistung dagegen entschieden; sehen Sie, ob sie für Sie nützlich sind.)