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

Efektivní určení, zda je firma otevřena či nikoli, na základě otevírací doby prodejny

Pokud jste ochotni se podívat pouze na jeden týden najednou, můžete kanonizovat všechny otevírací/zavírací časy a nastavit počet minut od začátku týdne, řekněme neděle 0 hodin. Pro každý obchod vytvoříte několik n-tic ve tvaru [startTime, endTime, storeId]. (Pro hodiny, které trvaly nedělní půlnoc, byste museli vytvořit dvě n-tice, jednu jdoucí do konce týdne a jednu začínající na začátku týdne). Tato sada n-tic by byla indexována (řekněme se stromem, který byste předběžně zpracovali) na startTime i endTime. N-tice by neměly být tak velké:týden má pouze ~10k minut, které se vejdou do 2 bajtů. Tato struktura by byla elegantní uvnitř tabulky MySQL s příslušnými indexy a byla by velmi odolná vůči neustálému vkládání a mazání záznamů při změně informací. Váš dotaz by byl jednoduše "select storeId where startTime <=time and endtime>=time", kde čas byly kanonizované minuty od půlnoci v neděli.

Pokud se informace příliš často nemění a chcete, aby vyhledávání bylo velmi rychlé, můžete předem vyřešit každý možný dotaz a uložit výsledky do mezipaměti. Například týden má pouze 672 čtvrthodinových period. Se seznamem podniků, z nichž každý měl seznam otevírací a zavírací doby, jako je řešení Brandona Rhodese, můžete jednoduše procházet každých 15 minut v týdnu, zjistit, kdo má otevřeno, a uložit odpověď do vyhledávací tabulky. nebo seznam v paměti.



  1. Použití Non-Capturing Groups v MySQL REGEXP

  2. Instalace MySQL na CentOS 7

  3. Obnovení SQL Server 2017

  4. SQL dotaz k vytvoření databáze v MySQL