0

テーブルでの UPDATE 操作の高速化を手伝ってください。テーブルには、レコードを検索してそのフィールドを更新するために使用される一意の ID があります。テーブルには 1M のレコードがあります。インデックスは使用されません。一意の ID のみ。挿入には時間がかかります..ミリ秒を期待していました。

テーブル構造:

create table customers
(
    id int IDENTITY(1,1) UNIQUE NOT NULL,
    phonenum varchar(15) UNIQUE NOT NULL,
    date datetime,
    company varchar(150),
    full_name varchar(150),
    address varchar(150),   
    street varchar(100),
    zip varchar(100),
    city varchar(100),
    info varchar(300),
    op_data varchar(150),
    op_date datetime,
    op_user_taken varchar(100),
    op_time_taken  datetime,
    op_status varchar(100),
    user_taken varchar(100),
    time_taken  datetime,
    status varchar(100),        
    );

SqlConnection System.Data.SqlClient.SqlConnection および ExecuteNonQuery メソッドを使用してレコードを更新しています。

テーブルを再設計する必要がありますか、または ExecuteNonQuery が非常に遅いですか?

編集: 更新コマンド:

"UPDATE customers SET user_taken=@param1, time_taken=@param2,
 date=@param3, company=@param4, full_name=@param55,
 address=@param6, street=@param8, zip=@param9,
 city=@param10, info=@param11 , status=\'Completed\',
op_data=@param12 WHERE id=@param7";
4

3 に答える 3

7

id 列を主キーにします。主キーは自動的にインデックスになります。次のような単純な更新ステートメントを実行している場合:

UPDATE customers SET <something> WHERE id = @id 

次に、これは INDEX SEEK を実行し、はるかに高速になります。そのインデックスがないと、INDEX SEEK または INDEX SCAN (大量の行を更新している場合に発生する) よりも桁違いに長い時間がかかる TABLE SCAN で更新しています。

もう 1 つのトリックは、更新ステートメントを取得して SQL Server で実行し、実行計画を確認することです。これにより、ボトルネックがどこにあるかがわかります。また、クエリ オプション | に移動することもできます。高度な | 出力タブに表示する統計を設定します。

于 2011-07-29T20:32:53.750 に答える
0

クラスター化インデックス(デフォルトでは非クラスター化)がないためだと思いますunique。そのため、SQL Serverはヒープ上の非クラスター化インデックスを使用して更新するレコードを検索します(UNIQUEインデックスです)。Idではなく、主キー(デフォルトでクラスター化されている)である必要がありますUNIQUE

于 2011-07-29T20:44:41.713 に答える