sql >> Database teknologi >  >> RDS >> Mysql

mysql - søg tidsstempel efter time på dagen

Du kan bruge HOUR() funktion:

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

Desværre, denne forespørgsels ydeevne vil være forfærdelig , så snart du går over et par tusinde rækker - funktioner kan ikke indekseres, så der vil være en fuld tabelscanning hver gang denne forespørgsel kører.

Hvad vi gjorde i en lignende situation:vi oprettede en anden kolonne updatetime_hour , indekserede det og udfyldte det ved indsættelse (og opdateret ved opdatering); så bliver forespørgslen hurtig:

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

Ja, vi har denormaliseret dataene, og det er lidt mere husholdning, men jeg har endnu ikke set en hurtigere løsning. (Vi overvejede og målte indsættelses- og opdateringstriggere for at udfylde updatetime_hour fra updatetime , men besluttede sig imod for præstation; se, om de ville være nyttige for dig.)



  1. CURRENT_TIMESTAMP() Funktion i Oracle

  2. Monitoring Galera Cluster for MySQL eller MariaDB - Understanding Metrics (Opdateret)

  3. Emulering af en transaktionssikker SEKVENS i MySQL

  4. Entity Framework Indsættelse af indledende data ved genopbygning