データベースに日付と時刻を保存するには、2 つの選択肢があります。
PHP の time 関数から時刻と日付を生成し、データベースに 4 バイトの int データ型に格納します。
データベースに挿入する際に、日時を 8 バイトの datetime データ型に生成します。
私の質問は、並べ替えに日付と時刻の列を使用する場合、どのタイプが SQL クエリを高速化するかということです。
int
人間が読めない日付と時刻の値をフォーマットに含む DB にクエリを作成するのは、いつも嫌いです。
使用すると、クエリがナノ秒速くなるかもしれませint
んが、それは本当に価値がありますか? 私はノーと言います!
TIMESTAMP
データ型を使用します。数値として保存されますが、フォーマットされて返されます。そのため、ソートが高速になり、人間が読みやすくなります。
データベースのネイティブ形式を使用して日時を保存することをお勧めします。
この目的のために別のバイナリ形式を使用したいと思う機会はほとんどありません。これにより、データベースのそのコンポーネントは、他のアクセス方法では基本的に操作できなくなります。
人間の可読性に関しては、人間が読める形式で日付を提供するテーブルにビューをアクセスさせることでその問題を解決できます (他のデータベースでは、計算列を含むテーブルを定義できます)。また、データベースを認識しているツールは、人間が読める形式で出力を生成する必要があります。
データベースが非常に大きいか、非常に制約の厳しい環境にある場合を除き、ストレージについて心配する必要はありません。列に NULL を許可するときに格納される余分なビット、またはフィールドがハードウェア ワード境界で整列されていない場合にフィールド間に追加される可能性のある余分なパディング、またはレコードが一致しないためにデータ ページ上の空きスペースについて考えていない可能性があります。ページ境界に揃えないでください。
スペースが非常に重要な考慮事項である場合は、独自の日付/時刻形式を開発して、2 バイトまたは 3 バイトにできるかどうかを確認することをお勧めします。