sql >> データベース >  >> RDS >> Oracle

データベース列のビットフラグに不利な点はありますか?

    役割がほんの一握りの場合、ストレージも保存しません。 PostgreSQLのスペース 。 integer 列は4バイト、bigintを使用します 8バイト。どちらも位置合わせのパディングが必要な場合があります:

    • Postgresの行サイズを理解する
    • PostgreSQLでのスペースの計算と節約

    boolean 列は1バイトを使用します。事実上、1つのintegerに4つ以上のブール列を収めることができます。 列、bigintの場合は8つ以上 。

    NULLも考慮に入れてください 値は、NULLビットマップで1ビット(簡略化)のみを使用します。

    個々の列は読みやすく、インデックス 。他の人はすでにそれについてコメントしています。

    式または部分インデックスのインデックスを利用して、インデックスの問題(「非仮位」)を回避することもできます。次のような一般的なステートメント:

    データベースは、このようなクエリでインデックスを使用できません

    または

    これらの条件はSARGableではありません!

    完全に真実ではない -おそらく、これらの機能を欠いている他のRDBMSの場合もあります。
    しかし、問題を完全に回避できるのに、なぜ回避するのでしょうか。

    あなたが明らかにしたように、私たちは6つの異なるタイプ(多分それ以上)について話している。個別のbooleanを使用する 列。 1つのbigintと比較しても、おそらくスペースを節約できます。 。この場合、スペース要件は重要ではないようです。

    もし これらのフラグは相互に排他的でした 、1つを使用できます タイプenumの列 または、小さなルックアップテーブルとそれを参照する外部キー。 (質問の更新で除外されました。)



    1. T-SQLを使用して、文字列からn番目に区切られた要素を返します

    2. MariaDBでのLTRIM()のしくみ

    3. mysql_fetch_array()は、パラメーター1がリソースの問題であると想定しています

    4. 外部キーの制約により、サイクルまたは複数のカスケードパスが発生する可能性がありますか?