sql >> Databáze >  >> RDS >> Mysql

mysql - hledání časového razítka podle hodiny dne

Můžete použít HOUR() funkce:

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

Bohužel, výkon tohoto dotazu bude příšerný , jakmile překročíte několik tisíc řádků – funkce nejsou indexovatelné, takže při každém spuštění tohoto dotazu dojde k úplnému prohledání tabulky.

Co jsme udělali v podobné situaci:vytvořili jsme další sloupec updatetime_hour , indexoval jej a naplnil jej při vložení (a aktualizoval při aktualizaci); pak se dotaz zrychlí:

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

Ano, data jsme denormalizovali a je to o něco větší úklid, ale ještě jsem neviděl rychlejší řešení. (Zvážili jsme a změřili spouštěče vložení a aktualizace, aby se naplnily updatetime_hour od updatetime , ale rozhodl se proti pro výkon; zjistěte, zda by pro vás byly užitečné.)



  1. Date_trunc PostgreSQL v mySQL

  2. Jak svázat proměnné SQL v PHP?

  3. Aktualizace denormalizovaných databázových tabulek

  4. Vyberte poslední vložené id