Maison >base de données >tutoriel mysql >Comment le type « tsrange » de PostgreSQL peut-il optimiser les requêtes pendant les heures de bureau ?

Comment le type « tsrange » de PostgreSQL peut-il optimiser les requêtes pendant les heures de bureau ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-02 13:19:39553parcourir

How Can PostgreSQL's `tsrange` Type Optimize Queries for Business Hours?

Exécution d'une requête sur les heures d'ouverture dans PostgreSQL

Dans PostgreSQL, vous pouvez effectuer une requête pour trouver tous les enregistrements « ouverts » en fonction de heures de fonctionnement spécifiées à l’aide d’une combinaison de comparaisons de date et d’heure. Cependant, cette approche peut devenir complexe, surtout si les heures se terminent vers la fin de la semaine.

Solution proposée utilisant le type tsrange

Pour simplifier et optimiser cette requête, vous pouvez reconcevoir le tableau pour stocker les heures d'ouverture sous la forme d'un ensemble de valeurs tsrange (plage d'horodatage sans fuseau horaire). Cela nécessite PostgreSQL version 9.2 ou ultérieure et implique les étapes suivantes :

Mise en page de la table :

  • Créez une table avec une colonne tsrange nommée hours pour stocker les heures d'ouverture. au lieu de colonnes séparées pour les heures d'ouverture et de fermeture.

Exemple Données :

CREATE TABLE hoo (
  hoo_id  serial PRIMARY KEY
, shop_id int NOT NULL
, hours   tsrange NOT NULL
);
  • Les heures d'ouverture du mercredi 18h30 au jeudi 05h00 UTC peuvent être insérées comme :
INSERT INTO hoo(shop_id, hours)
VALUES (123, '[1996-01-03 18:30, 1996-01-04 05:00]');

Contrainte d'exclusion :

  • Une contrainte d'exclusion est ajoutée pour empêcher entrées qui se chevauchent par boutique à l'aide de l'index GiST.

Fonctions d'assistance :

  • Deux fonctions d'assistance, f_hoo_time() et f_hoo_hours(), sont définies pour normaliser les horodatages et diviser les plages le dimanche minuit.

Requête optimisée :

Grâce à la nouvelle structure de table et aux fonctions d'assistance, vous pouvez simplifier votre requête pour :

SELECT *
FROM hoo
WHERE hours @> f_hoo_time(now());

Avantages :

  • L'utilisation de tsrange simplifie la syntaxe de requête et améliore les performances en tirant parti d'un index pris en charge.
  • La contrainte d'exclusion garantit l'intégrité des données et empêche les entrées qui se chevauchent.
  • L'index GiST permet une recherche rapide et efficace basée sur le champ des heures.
  • 🎜>
  • L'index SP-GiST sur quelques heures seulement améliore encore les performances pour les requêtes impliquant un grand nombre de résultats.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn