加速UPDATE操作

本文关键字:操作 UPDATE 加速 | 更新日期: 2023-09-27 18:03:53

请帮我加快该表的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";

加速UPDATE操作

将id列设为主键。主键自动成为索引。如果您正在运行一个简单的更新语句,如:

UPDATE customers SET <something> WHERE id = @id 

那么这应该运行一个INDEX SEEK并且快得多。如果没有这个索引,您将使用TABLE SCAN进行更新,这比index SEEK甚至index SCAN(如果您更新大量行,则会发生这种情况)花费的时间要长得多。

另一个技巧是将你的update语句在SQL Server中运行,并查看执行计划。这将告诉您瓶颈在哪里。此外,您可以转到Query Options | Advanced |并将统计数据设置为显示在output选项卡中。

我认为这是因为你没有聚集索引(unique是默认的非聚集),所以SQL Server使用非聚集索引在堆上找到你的记录更新(UNIQUE是一个索引)。Id应该是主键(默认是集群的),而不是UNIQUE

Try -

using (SqlCommand comm = new SqlCommand("update sql", conn))
{
      SqlDataReader results = (SqlDataReader)comm.ExecuteReader();
}

只是好奇…