1

私は分析するための雑多なデータの品揃えを与えられ、窮地に立たされています。データ型の一意でない識別子を持つ最大200万行のテーブルがありますvarchar(50)。この識別子はに固有personIDです。このジャンクを正規化する必要がある方法を正確に理解するまで、今すぐ役立つ可能性のある別の質問があります。varchar(25)たとえば、データ型をに変更すると、クエリが非結合で結合されたときにクエリの実行が速くなります。 PKフィールド?文字列内のすべての文字は整数ですが、それらをintに変換しようとすると、オーバーフローが発生します。または、クエリの一部をより高速に実行するために、当面の間、何らかの方法で列にインデックスを付けることができますか?

編集:personIDは、人に関する人口統計情報を含む別のテーブルへの外部キーになります。

4

2 に答える 2

2

技術的には、varcharの長さは最大長を指定します。

実際の長さは可変であるため(したがって名前)、最大値を低くしても、実際の文字列で行われるため、評価は変更されません。

詳細については :

このMSDNの記事 とこの スタックオーバーフローの投稿を確認してください

于 2012-10-24T15:24:16.613 に答える
0

Varchar(50)確かにvarchar(25)そのテーブルのレコードのサイズを減らし、それによってテーブルを含むデータベースページの数を減らし、クエリのパフォーマンスを向上させます(わずかな範囲である可能性があります)が、そのようなALTERTABLEステートメントには長い時間がかかる場合があります。

または、結合列にインデックスを定義し、取得リストが小さい場合は、それらの列をインデックス定義(Covering index)にも含めることができます。これにより、クエリの実行時間が大幅に短縮されます。

于 2012-10-24T15:23:23.953 に答える