社内フォーラムソフトウェアでCOMPRESS()
とDECOMPRESS()
を使用することに慣れていますが(現在はSQL Server 2017です)、データベースをできる限り効率的にしようとしています。 SQL Server 2019への将来の移行時に_UTF-8
のようにLatin1_General_100_CI_AS_SC_UTF8
を現在の照合に追加することには利点がありますか?
これは、ここ:
可変長エンコーディングであるUTF-8エンコーディングは、一部のシナリオでは大きなメリットになる可能性がありますが、状況によっては状況が悪化することもあります。残念ながら、データ圧縮とクラスター化列ストアインデックスがSQL Serverのすべてのエディションで利用可能であることを考えると、「_ UTF8」エンコーディングの使用はほとんどありません。 UTF-8エンコーディングの真のメリットがある唯一のシナリオは、次の条件がすべて当てはまる場合です。
HTMLページの保存は、この説明に当てはまるシナリオの良い例です。もちろん、UTF-8は、最も一般的な文字に最小限のスペースを使用しながら、Unicode文字の全範囲を許可しているため、インターウェブの推奨エンコーディングです。
データベースをできるだけ効率的にしよう
ここで実際に機能している効率には、少なくとも2つの異なるタイプがあります。
特定の条件下では(その回答の上部にリンクされている私のブログ投稿の「推奨される使用方法/ガイダンス」セクションのコピー/貼り付けであるOutmanの回答で説明されているように)、スペースを節約できますが、それは完全にタイプと行ごとの文字数。
ただし、少なくとも現在の実装では、速度が減少する可能性が高くなります。これは、内部でのUTF-8データの処理方法が原因である可能性があります。 UTF-8データを非UTF-8 VARCHAR
データと比較すると、両方の値がUTF-16 LE(つまりNVARCHAR
)に変換されることを知っています。 Windows/SQL Server/.NETが常にUnicodeを処理していたため、UTF-8データをNVARCHAR
に変換するために他の(おそらくほとんどの)操作が必要になったとしても、私は驚かないでしょう。
したがって、UTF-8を使用することでメリットが得られる可能性のあるシナリオがあると仮定すると、どちらの効率がより重要かを選択する必要があります。
現在、UTF-8が環境自体が本来UTF-8(Linuxなど)であるシナリオにメリットがあるかどうかはまだ不明です。通常、データベースドライバー(ODBC、SQL Native Clientなど)は、クライアントとサーバー間の変換を処理します。ここでパフォーマンス/効率が向上する可能性があると思いますifこれを行うと、ドライバーソフトウェアが必要な追加の手順(およびCPUサイクル)をスキップしますそれらのエンコーディング変換を行います。これまでのところ、私はテストしていないため、これは単なる理論です。
次の点に注意してください。
UTF-8は、実装を容易にするためにASCII互換性を実現するように設計されました。これにより、標準ASCIIベースのシステムが許可されます(値0〜127、値128〜255が拡張されますASCIIこれでカバーされていません)新しいエンコーディングで何も再保存せずにUnicodeを有効にします。
SQL Serverの目標は、現在VARCHAR
を使用している既存のアプリが、多くの再コーディング(つまり、文字列リテラルにN
プレフィックスを追加)したり、 VARCHAR
からNVARCHAR
へ。
これは、圧縮形式として設計されたではありません。 UTF-8でフットプリントが削減されたデータがある場合は、すばらしいです。しかし、標準ASCII以外のデータを処理する場合、節約効果がないか、さらに悪い場合は、UTF-8に移動してデータサイズを増やすことができます(65kのうち63k BMP文字は、UTF-8で3バイト、つまり、UTF-16で必要な2バイトよりも1バイト多くです。
また、UTF-8によってパフォーマンスが向上する場合、または少なくともパフォーマンスの低下が見られない場合は、すばらしいです。しかし、それを期待しないでください。実際、パフォーマンスが低下したとしても驚かないでください。
SQL ServerでUTF-8照合を実装する場合は、いくつかの潜在的なデータの「問題」に注意する必要があります。
VARCHAR
columns。これは、照合の優先順位により、照合がUTF-16から列が使用しているコードページに効果的にダウングレードされるためです。詳細と例については、私の投稿の「心に留めておくべきこと:運用」セクションを参照してください: SQL Server 2019のネイティブUTF-8サポート:救世主か偽預言者か