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

Effektiv afgørelse af, om en virksomhed er åben eller ej baseret på butikstider

Hvis du er villig til blot at se på en enkelt uge ad gangen, kan du kanonisere alle åbnings-/lukketider til at blive fastsat antal minutter siden ugestart, f.eks. søndag 0 timer. For hver butik opretter du et antal tuples af formen [startTime, endTime, storeId]. (I timer, der strakte sig over søndag midnat, skulle du oprette to tupler, en går til slutningen af ​​ugen, en starter i begyndelsen af ​​ugen). Dette sæt tupler ville blive indekseret (f.eks. med et træ, du ville forbehandle) på både startTime og endTime. Tuplerne bør ikke være så store:der er kun ~10k minutter på en uge, som kan passe i 2 bytes. Denne struktur ville være yndefuld inde i en MySQL-tabel med passende indekser og ville være meget modstandsdygtig over for konstante indsættelser og sletninger af poster, efterhånden som information ændres. Din forespørgsel ville simpelthen være "vælg storeId hvor startTime <=time and endtime>=time", hvor tiden var de kanoniserede minutter siden midnat søndag.

Hvis oplysningerne ikke ændrer sig meget ofte, og du ønsker at have opslag skal være meget hurtige, kan du løse alle mulige forespørgsler på forhånd og cache resultaterne. For eksempel er der kun 672 kvartersperioder på en uge. Med en liste over virksomheder, som hver havde en liste over åbnings- og lukketider som Brandon Rhodes' løsning, kunne du ganske enkelt gentage hver 15-minutters periode på en uge, finde ud af, hvem der har åbent og derefter gemme svaret i en opslagstabel eller hukommelsesliste.



  1. SQL Truncate

  2. Forstå Pivot Operator i SQL

  3. Forebyggelse af SQL-injektionsangreb med Python

  4. TransactSQL for at køre et andet TransactSQL-script