Postgres でのタイムスタンプの 5 分境界への効率的な切り詰め
タイムスタンプの切り詰めは時間分析に不可欠です。 Postgres は date_trunc 関数を提供しており、タイムスタンプをさまざまな単位に丸めることができます。ただし、最も近い 5 分境界に切り捨てるには、より具体的なアプローチが必要です。
通常、次の単純な方法が採用されます。
date_trunc('hour', val) + date_part('minute', val)::int / 5 * interval '5 min'
ただし、パフォーマンスが重要な場合は、可能な限り最速のソリューションを模索することが重要です。
代替アプローチ: エポックを通過するTime
別のアプローチには、タイムスタンプをエポック タイムスタンプに変換してから切り捨てることが含まれます。このメソッドは次のように表されます。
SELECT to_timestamp( floor(EXTRACT(epoch FROM ht.time) / EXTRACT(epoch FROM interval '5 min')) * EXTRACT(epoch FROM interval '5 min') ) FROM huge_table AS ht LIMIT 4000000
ベンチマークと結果
両方のメソッドのパフォーマンスを評価するために、400 万の大きなテーブルに対して非公式のベンチマークが実行されました。行。キャッシュの利点を防ぐために、クエリは交互に行われました。
結果:
Method | Run 1 | Run 3 | Run 5 |
---|---|---|---|
Epoch Time | 39.368 seconds | 39.526 seconds | 39.883 seconds |
Hour and Minute | 34.189 seconds | 37.028 seconds | 32.397 seconds |
結論
驚くべきことに、次の方法を使用します。 date_trunc と date_part は、一貫してエポックタイムアプローチよりも優れたパフォーマンスを示しました。エポックタイム方式は、より多用途でパラメータ化が容易であるにもかかわらず、より広範囲の時間単位の切り捨てのためにパフォーマンスをいくらか犠牲にします。
したがって、特に Postgres でタイムスタンプを 5 分境界に切り捨てるには、date_trunc を使用する簡単な方法が最適です。 date_part が推奨されるアプローチです。
以上がPostgreSQLでタイムスタンプを5分間隔に切り詰める最速の方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。