1

私の Web サイトでは、ユーザーを作成しません。ユーザーは、私がアクセスできない別のシステムで作成されています。

そこで彼らは Userid = VARCHAR(50) を使用しました

私の側では、次のような非常に単純なテーブルを保持しています

 UserId VARCHAR(50)
 Employer VARCHAR(4)
 UserSpecificField VARCHAR(8)
 DateWhenItWasAddedToOurSystem DATETIME

システムにログインしたら、単純な SYNC を作成するだけなので、システムにも全員がいます。このテーブルには 2000 件のレコードがあります。

質問:

インデックス作成が優れていることはわかっており、使用する必要があります。このテーブルにインデックス付きの列を追加することを考えていましたが、役立つかどうかわかりません。

その列を何にも使用しない場合でも、インデックスを追加するとパフォーマンスが向上しますか? どこでも USER を使用するため、ユーザーの VARCHAR(50) ID を使用して SQL JOIN を作成する必要があります。

ありがとうございました

4

1 に答える 1

0

テーブルのサイズが小さいことに加えて、この構造のテーブルで UserId にインデックスを追加しても意味がありません。この列 (varchar(50) フィールドに平均 50% が入力されるとすると)、この 1 つの列はテーブル サイズの 70% になることに注意してください。そのため、db エンジンは最初にインデックスをスキャンする必要があり (これはほぼ enitre テーブルのサイズです)、次にテーブル自体でレコードを探します。この操作は、単にテーブルをスキャンするよりも多くのリソースを消費します。オプティマイザーはインデックスをまったく使用しないと確信しています。自分でテストしてください。私の意見での唯一のオプションは、クラスター化されたインデックスを追加することです。これにより、実質的に UserId でテーブルを「並べ替え」、クエリの実行を高速化し、追加の構造 (つまり、「通常の」インデックス) を構築することでオーバーヘッドを発生させません。更新操作はあまり行われていないと思います。

create unique clustered index idxCLU__userid on <your_table_name>(UserId )
于 2013-03-15T09:28:21.597 に答える