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 进行更新(如果您要更新大量行,则会发生这种情况)。

另一个技巧是获取更新语句并在 SQL Server 中运行它并查看执行计划。这将告诉您瓶颈在哪里。此外,您可以转到查询选项 | 高级 | 并设置统计信息显示在输出选项卡中。

于 2011-07-29T20:32:53.750 回答
0

我认为这是因为您没有聚集索引(unique默认情况下是非聚集索引),因此 SQL Server 使用堆上的非聚集索引来定位要更新的记录(UNIQUE是索引)。Id应该是主键(默认是集群的),而不是UNIQUE.

于 2011-07-29T20:44:41.713 回答
-2

尝试 -

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

只是好奇...

于 2011-07-29T20:34:41.903 回答