PostgreSQL で数時間のクエリを実行する方法
元のクエリの複雑さ
元のこのクエリは、(指定された営業時間内で) "オープン" なレコードを識別することを目的としていますが、次の理由により複雑でした。稼働時間が週末に重なる可能性があるさまざまなシナリオに対処する必要があるためです。このプロセスを簡素化するために、tsrange と呼ばれるデータ構造を使用する別のアプローチを採用します。
tsrange の紹介
tsrange は、次のデータ型です。タイムゾーンなしでタイムスタンプの範囲を表す PostgreSQL。これは、時間間隔を保存および操作するための便利な方法を提供します。
テーブル構造の再設計
既存の列 (opens_on、closes_on、opens_at、closes_at) を置き換えます。 ) tsrange 型の hours という名前の単一の列があります。営業時間は、tsrange 値のセットとして保存されます。
例
たとえば、次の tsrange 値は、水曜日の午後 6 時から木曜日までの営業時間を表します。 、午前 5 時:
'[1996-01-03 18:30, 1996-01-04 05:00]'
を使用したクエリtsrange
更新されたテーブル構造により、クエリは非常に単純になります。
SELECT * FROM hoo WHERE hours @> f_hoo_time(now())
関数 f_hoo_time() は、タイムゾーン付きのタイムスタンプをタイムスタンプに変換しますが、包含演算子は(@>) 現在の時間が指定された時間内にあるかどうかを確認しますrange.
インデックスとパフォーマンス
tsrange を使用してクエリを最適化するには、hours 列に SP-GiST インデックスを作成することをお勧めします。このインデックスにより、時間範囲の効率的な検索が可能になり、クエリのパフォーマンスが向上します。
結論
tsrange と SP-GiST インデックスを活用することで、クエリのパフォーマンスを大幅に簡素化できます。クエリを実行してパフォーマンスを向上させることができます。このアプローチは、元のクエリよりも効率的かつ堅牢です。
以上がPostgreSQL の「tsrange」はどのように操作時間クエリを簡素化し、最適化できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。