1

プロバイダー名とサービスを提供できる国を保存する必要があります。92の郡があります。最大92行を格納するのではなく、2 ^ 91を格納したいので、それらが郡1と2でのみ提供される場合は、3を格納します。

私が抱えている問題は、最大数が2475880078570760549798248448であるということです。これは、最大のBigIntには大きすぎます。

以前はオプションの数が少なかったので、次のようなことができました。

SELECT * FROM tblWhatever WHERE my_col & 2;

my_colに2、3、6などが格納されている場合(ビット2のあるもの)、それが見つかります。

格納方法と、INT以外の方法で格納されている場合のクエリ方法の2つがわからないと思います。

4

1 に答える 1

1

BINARY(13)最大94ビットを格納するためのデータ型として使用できます。ただし、MySQLのビット演算子BIGINTは64ビットのみをサポートします。

したがって、ビット演算子を使用する場合は、郡のビットフィールドを2つのBIGINT列(またはおそらく1つとBIGINT1つINT)に格納する必要があります。アプリケーションコードでは、2つの列のどちらを検索するかを決定します。それは厄介なようです。

ただし、パフォーマンスに関する考慮事項を指摘します。検索にビット演算子を使用するのはあまり効率的ではありません。インデックスを使用して検索を実行することはできないため、すべてのクエリでテーブルスキャンが強制されます。データが大きくなるにつれて、これはますますコストがかかるようになります。

LIKE '%word%'これは、で部分文字列を検索したり、特定の月の日付ですべての日付を検索したりするのと同じ問題です。

したがって、結局、各郡を別々の行に格納することをお勧めします。サービスプロバイダーごとに92行を保存する必要はありません。サービスを提供する郡の数と同じ数の行を保存するだけで済みます。行がない場合は、その郡にサービスがないことを示します。

于 2013-01-02T20:37:24.613 に答える