SQLのNULL値:直感に反する挙動

2025-01-09

SQLにおけるNULL値の扱いは、しばしば予想を裏切ります。この記事では、一意制約を持つカラムにおけるNULL値の驚くべき挙動、つまり複数のNULL値が共存できることを明らかにします。SQLite、Postgres、MySQLの実例を通して、NULL値が「=」と「IS」演算子で異なる振る舞いをすることを示し、その根本的な理由を説明します。一意性を保証するための2つの解決策、生成カラムの作成と部分インデックスの使用を探求します。テーブルサイズが増加したり、潜在的なエラーが発生したりすることを避けるため、部分インデックスの使用がベストプラクティスとして推奨されます。

続きを読む
開発

Convoy社、UUIDv4からULIDへ移行:ビッグデータ時代における効率性とスケーラビリティ

2024-12-28

MongoDBからPostgresへのデータベース移行において、Convoy社は一意識別子としてUUIDv4からULIDへの切り替えを決定しました。本記事ではUUIDv4とULIDを比較し、ULIDの長所である辞書順ソート可能性、URLフレンドリー性、データベースインデックス効率の向上を強調しています。ただし、生成と挿入速度はやや遅くなります。Convoy社がULIDを選択した主な理由は、大規模データセットにおけるページネーションのパフォーマンス問題を解決するためです。ULIDの生成速度はわずかに遅いものの、特に大規模データ処理におけるパフォーマンス向上は、その価値があると判断されています。また、ULIDによる時間情報の漏洩リスクやユーザーデータへの影響についても議論し、将来的なUUIDv7への移行の可能性にも触れています。

続きを読む
開発