请帮我加快桌上的UPDATE操作。 表具有唯一ID,用于查找记录和UPDATE其字段。 表中有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";
答案 0 :(得分:7)
将您的ID列设为主键。主键自动成为索引。如果您正在运行简单的更新语句,例如:
UPDATE customers SET <something> WHERE id = @id
然后这应该运行一个INDEX SEEK并且要快得多。如果没有该索引,您将使用TABLE SCAN进行更新,该SCAN比INDEX SEEK或甚至INDEX SCAN(如果您正在更新大量行时会发生的那样)的数量级更长。
另一个技巧是获取更新语句并在SQL Server中运行它并查看执行计划。这将告诉你瓶颈在哪里。此外,您可以转到查询选项|高级|并设置要在输出选项卡中显示的统计信息。
答案 1 :(得分:0)
我认为这是因为您没有聚簇索引(默认情况下unique
是非聚簇的),因此SQL Server使用堆上的非聚簇索引来查找您的记录以进行更新(UNIQUE
是一个索引)。 Id
应该是主键(默认情况下是群集),而不是UNIQUE
。
答案 2 :(得分:-2)
尝试 -
using (SqlCommand comm = new SqlCommand("update sql", conn))
{
SqlDataReader results = (SqlDataReader)comm.ExecuteReader();
}
好奇......