sql >> Database >  >> RDS >> Mysql

mysql - zoek tijdstempel op uur van de dag

Je zou de HOUR() kunnen gebruiken functie:

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

Helaas, de prestaties van deze zoekopdracht zijn vreselijk , zodra u over een paar duizend rijen gaat - functies zijn niet indexeerbaar, dus er zal elke keer dat deze query wordt uitgevoerd een volledige tabelscan zijn.

Wat we deden in een vergelijkbare situatie:we hebben een andere kolom gemaakt updatetime_hour , geïndexeerd en ingevuld bij invoegen (en bijgewerkt bij update); dan wordt de vraag snel:

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

Ja, we hebben de gegevens gedenormaliseerd en het is een beetje meer huishoudelijk werk, maar ik heb nog geen snellere oplossing gezien. (We hebben invoeg- en update-triggers overwogen en gemeten om de updatetime_hour in te vullen van updatetime , maar besloot tegen voor prestaties; kijk of ze nuttig voor je zijn.)



  1. Vereist LIMIT OFFSET,LENGTH ORDER BY voor paginering?

  2. Gegevens invoegen via een functie met tabelwaarde in SQL Server

  3. MySQL Bulk invoegen via PHP

  4. GROUP BY gebruiken in een query terwijl variabelen worden gebruikt