然后数据会频繁的进行更新。
我现在用多条update语句一次进行更新,100条,大概要0.4秒左右。。效率不够,更新来不及。
请教一下, 还能用什么办法能更快的更新呢?
SqlDataAdapter 这个能提高效率吗 ?
24 个解决方案
#1
更新如何来不及,数据库肯定不会提示你来不及更新
#2
恩。 就是速度有点慢。
#4
多条update语句?就是你update 100条数据你就执行了100次update ?
这样的话你就可以要么选择用xml 做参数或者用datatable 做参数使用存储过程来批量更新,这样应该效率会高一点
这样的话你就可以要么选择用xml 做参数或者用datatable 做参数使用存储过程来批量更新,这样应该效率会高一点
#5
这个是个思路, 得学习一下 表值参数的知识。
#6
是的,就是100条update 语句,一次执行。
SqlDataAdapter 好像可以直接更新datatable, 但是不知道效率会怎么样。
#7
检查下执行计划,是否通过非聚集索引去更新的。另外检查下表有多少非聚集索引,聚集索引在什么字段上。
update的不仅仅是更新自己的数据,还会影响聚集索引,非聚集索引的内容
update的不仅仅是更新自己的数据,还会影响聚集索引,非聚集索引的内容
#8
是根据主key进行更新的。 其他非聚集索引是几个int型和numeric型字段。
#9
方便给出表结构,和update 1次即100条记录的实际执行计划么。
另外用sp_helpindex 贴一下索引情况
另外用sp_helpindex 贴一下索引情况
#10
更新是否用的索引,比较重要
#11
表结构现在拿不到。 关于索引,即使只用一个ID (int 型) 聚集索引。 速度也是100条大概0.4秒。
执行计划的话, 我是这样的: 拼接100条update语句,然后调用:
SqlCommand sqlCom = new SqlCommand(strSQL, sqlCon_price);
sqlCom.CommandTimeout = 3000;
sqlCom.CommandType = CommandType.Text;
sqlCom.ExecuteNonQuery();
执行这100条update语句的。
#12
你理解错了,我是想看update的语句,SQL server的实际执行计划,不是c#
#13
方便给出表结构,和update 1次即100条记录的实际执行计划么。
另外用sp_helpindex 贴一下索引情况
表结构现在拿不到。 关于索引,即使只用一个ID (int 型) 聚集索引。 速度也是100条大概0.4秒。
执行计划的话, 我是这样的: 拼接100条update语句,然后调用:
SqlCommand sqlCom = new SqlCommand(strSQL, sqlCon_price);
sqlCom.CommandTimeout = 3000;
sqlCom.CommandType = CommandType.Text;
sqlCom.ExecuteNonQuery();
执行这100条update语句的。
你理解错了,我是想看update的语句,SQL server的实际执行计划,不是c#
实在是抱歉, 语句也没有, 都是程序跑起来生成的,现在也没有环境。 而更新 语句 其实是根据ID,更新全字段。 这些字段包含,int型,numeric型,time型,还有较多的nvarchar型。。 这个类型对更新有影响么?
#14
方便给出表结构,和update 1次即100条记录的实际执行计划么。
另外用sp_helpindex 贴一下索引情况
表结构现在拿不到。 关于索引,即使只用一个ID (int 型) 聚集索引。 速度也是100条大概0.4秒。
执行计划的话, 我是这样的: 拼接100条update语句,然后调用:
SqlCommand sqlCom = new SqlCommand(strSQL, sqlCon_price);
sqlCom.CommandTimeout = 3000;
sqlCom.CommandType = CommandType.Text;
sqlCom.ExecuteNonQuery();
执行这100条update语句的。
你理解错了,我是想看update的语句,SQL server的实际执行计划,不是c#
实在是抱歉, 语句也没有, 都是程序跑起来生成的,现在也没有环境。 而更新 语句 其实是根据ID,更新全字段。 这些字段包含,int型,numeric型,time型,还有较多的nvarchar型。。 这个类型对更新有影响么?
通过查看sql server的实际执行计划就准确能定位是sql的问题,还是c#程序的问题,或者索引缺失的问题。另外服务器的IO或者其他因素。简单说,要分析的东西太多。我只能给你一个思路。根据你的描述,只能说达不到你的预期效果,至于是否真的慢,要对比。
#15
让数据库管理员,抓一下sql profiler,看一下实际运行情况。
#16
通过查看sql server的实际执行计划就准确能定位是sql的问题,还是c#程序的问题,或者索引缺失的问题。另外服务器的IO或者其他因素。简单说,要分析的东西太多。我只能给你一个思路。根据你的描述,只能说达不到你的预期效果,至于是否真的慢,要对比。
因为这些是我家里的电脑上跑的效果,我现在回了老家,拿不到具体的数据。
不过你说的也有道理,可能我电脑只能达到这个速度了。 而我是想看能不能再优化一下。 我自己的电脑就是普通台式机,cpu是A8的。 数据有1千万多一点。现在是测试,感觉速度有点慢。
那 请教一下,对于这样的大的数据,怎么能更新的更快呢? 而且是一台电脑, 我现在update的时候,进行查询的话 ,update就卡住了。 这个要怎么解决呢? 十分感谢。
#17
可以考虑脏读,select *from a with(nolock)
#18
单语法update视图的效率会比update表好,update大表有聚集索引的效率好,果然是主键更新,那么非聚集索引要少。
#19
建议按可控的规则(如全国数据按省份分)将表拆分为多个小表,增加数据并发性!
#20
可以考虑脏读,select *from a with(nolock)
即使用with(nolock),好像还是会卡的 。 我计划再弄个表,更新的时候直接插入,然后用存储过程来同步2个表。
#21
建议按可控的规则(如全国数据按省份分)将表拆分为多个小表,增加数据并发性!
已经做过查分。但是有个表有1千多万数据。 再拆就比较困难了。
#22
通过查看sql server的实际执行计划就准确能定位是sql的问题,还是c#程序的问题,或者索引缺失的问题。另外服务器的IO或者其他因素。简单说,要分析的东西太多。我只能给你一个思路。根据你的描述,只能说达不到你的预期效果,至于是否真的慢,要对比。
因为这些是我家里的电脑上跑的效果,我现在回了老家,拿不到具体的数据。
不过你说的也有道理,可能我电脑只能达到这个速度了。 而我是想看能不能再优化一下。 我自己的电脑就是普通台式机,cpu是A8的。 数据有1千万多一点。现在是测试,感觉速度有点慢。
那 请教一下,对于这样的大的数据,怎么能更新的更快呢? 而且是一台电脑, 我现在update的时候,进行查询的话 ,update就卡住了。 这个要怎么解决呢? 十分感谢。
A8 是什么cpu?
如果测试环境与生产不一致,调试效率是没用的。不同的硬件性能不同的设置数据库的处理瓶颈都不一样。
#23
A8 是什么cpu?
如果测试环境与生产不一致,调试效率是没用的。不同的硬件性能不同的设置数据库的处理瓶颈都不一样。
A8是AMD的一款APU(集成了显卡)。
说的有道理,因为现在生产环境还在弄,测试遇到了问题,看看能不能解决。毕竟,正式环境中有可能出现这个问题。
#24
先结贴。 感谢各位的回复。。
等放服务器上看效果怎么样。或许就没有这样的问题了。
等放服务器上看效果怎么样。或许就没有这样的问题了。
#1
更新如何来不及,数据库肯定不会提示你来不及更新
#2
恩。 就是速度有点慢。
#3
进行100次交互(递交 UPDATE 语句)的花费通常比数据库正真进行更新动作的花费要慢。
建议改用 表值参数 (ADO.NET),这样只需要交互一次就能把100条语句一次性更新。
建议改用 表值参数 (ADO.NET),这样只需要交互一次就能把100条语句一次性更新。
#4
多条update语句?就是你update 100条数据你就执行了100次update ?
这样的话你就可以要么选择用xml 做参数或者用datatable 做参数使用存储过程来批量更新,这样应该效率会高一点
这样的话你就可以要么选择用xml 做参数或者用datatable 做参数使用存储过程来批量更新,这样应该效率会高一点
#5
进行100次交互(递交 UPDATE 语句)的花费通常比数据库正真进行更新动作的花费要慢。
建议改用 表值参数 (ADO.NET),这样只需要交互一次就能把100条语句一次性更新。
这个是个思路, 得学习一下 表值参数的知识。
#6
多条update语句?就是你update 100条数据你就执行了100次update ?
这样的话你就可以要么选择用xml 做参数或者用datatable 做参数使用存储过程来批量更新,这样应该效率会高一点
是的,就是100条update 语句,一次执行。
SqlDataAdapter 好像可以直接更新datatable, 但是不知道效率会怎么样。
#7
检查下执行计划,是否通过非聚集索引去更新的。另外检查下表有多少非聚集索引,聚集索引在什么字段上。
update的不仅仅是更新自己的数据,还会影响聚集索引,非聚集索引的内容
update的不仅仅是更新自己的数据,还会影响聚集索引,非聚集索引的内容
#8
检查下执行计划,是否通过非聚集索引去更新的。另外检查下表有多少非聚集索引,聚集索引在什么字段上。
update的不仅仅是更新自己的数据,还会影响聚集索引,非聚集索引的内容
是根据主key进行更新的。 其他非聚集索引是几个int型和numeric型字段。
#9
方便给出表结构,和update 1次即100条记录的实际执行计划么。
另外用sp_helpindex 贴一下索引情况
另外用sp_helpindex 贴一下索引情况
#10
更新是否用的索引,比较重要
#11
方便给出表结构,和update 1次即100条记录的实际执行计划么。
另外用sp_helpindex 贴一下索引情况
表结构现在拿不到。 关于索引,即使只用一个ID (int 型) 聚集索引。 速度也是100条大概0.4秒。
执行计划的话, 我是这样的: 拼接100条update语句,然后调用:
SqlCommand sqlCom = new SqlCommand(strSQL, sqlCon_price);
sqlCom.CommandTimeout = 3000;
sqlCom.CommandType = CommandType.Text;
sqlCom.ExecuteNonQuery();
执行这100条update语句的。
#12
方便给出表结构,和update 1次即100条记录的实际执行计划么。
另外用sp_helpindex 贴一下索引情况
表结构现在拿不到。 关于索引,即使只用一个ID (int 型) 聚集索引。 速度也是100条大概0.4秒。
执行计划的话, 我是这样的: 拼接100条update语句,然后调用:
SqlCommand sqlCom = new SqlCommand(strSQL, sqlCon_price);
sqlCom.CommandTimeout = 3000;
sqlCom.CommandType = CommandType.Text;
sqlCom.ExecuteNonQuery();
执行这100条update语句的。
你理解错了,我是想看update的语句,SQL server的实际执行计划,不是c#
#13
方便给出表结构,和update 1次即100条记录的实际执行计划么。
另外用sp_helpindex 贴一下索引情况
表结构现在拿不到。 关于索引,即使只用一个ID (int 型) 聚集索引。 速度也是100条大概0.4秒。
执行计划的话, 我是这样的: 拼接100条update语句,然后调用:
SqlCommand sqlCom = new SqlCommand(strSQL, sqlCon_price);
sqlCom.CommandTimeout = 3000;
sqlCom.CommandType = CommandType.Text;
sqlCom.ExecuteNonQuery();
执行这100条update语句的。
你理解错了,我是想看update的语句,SQL server的实际执行计划,不是c#
实在是抱歉, 语句也没有, 都是程序跑起来生成的,现在也没有环境。 而更新 语句 其实是根据ID,更新全字段。 这些字段包含,int型,numeric型,time型,还有较多的nvarchar型。。 这个类型对更新有影响么?
#14
方便给出表结构,和update 1次即100条记录的实际执行计划么。
另外用sp_helpindex 贴一下索引情况
表结构现在拿不到。 关于索引,即使只用一个ID (int 型) 聚集索引。 速度也是100条大概0.4秒。
执行计划的话, 我是这样的: 拼接100条update语句,然后调用:
SqlCommand sqlCom = new SqlCommand(strSQL, sqlCon_price);
sqlCom.CommandTimeout = 3000;
sqlCom.CommandType = CommandType.Text;
sqlCom.ExecuteNonQuery();
执行这100条update语句的。
你理解错了,我是想看update的语句,SQL server的实际执行计划,不是c#
实在是抱歉, 语句也没有, 都是程序跑起来生成的,现在也没有环境。 而更新 语句 其实是根据ID,更新全字段。 这些字段包含,int型,numeric型,time型,还有较多的nvarchar型。。 这个类型对更新有影响么?
通过查看sql server的实际执行计划就准确能定位是sql的问题,还是c#程序的问题,或者索引缺失的问题。另外服务器的IO或者其他因素。简单说,要分析的东西太多。我只能给你一个思路。根据你的描述,只能说达不到你的预期效果,至于是否真的慢,要对比。
#15
让数据库管理员,抓一下sql profiler,看一下实际运行情况。
#16
通过查看sql server的实际执行计划就准确能定位是sql的问题,还是c#程序的问题,或者索引缺失的问题。另外服务器的IO或者其他因素。简单说,要分析的东西太多。我只能给你一个思路。根据你的描述,只能说达不到你的预期效果,至于是否真的慢,要对比。
因为这些是我家里的电脑上跑的效果,我现在回了老家,拿不到具体的数据。
不过你说的也有道理,可能我电脑只能达到这个速度了。 而我是想看能不能再优化一下。 我自己的电脑就是普通台式机,cpu是A8的。 数据有1千万多一点。现在是测试,感觉速度有点慢。
那 请教一下,对于这样的大的数据,怎么能更新的更快呢? 而且是一台电脑, 我现在update的时候,进行查询的话 ,update就卡住了。 这个要怎么解决呢? 十分感谢。
#17
可以考虑脏读,select *from a with(nolock)
#18
单语法update视图的效率会比update表好,update大表有聚集索引的效率好,果然是主键更新,那么非聚集索引要少。
#19
建议按可控的规则(如全国数据按省份分)将表拆分为多个小表,增加数据并发性!
#20
可以考虑脏读,select *from a with(nolock)
即使用with(nolock),好像还是会卡的 。 我计划再弄个表,更新的时候直接插入,然后用存储过程来同步2个表。
#21
建议按可控的规则(如全国数据按省份分)将表拆分为多个小表,增加数据并发性!
已经做过查分。但是有个表有1千多万数据。 再拆就比较困难了。
#22
通过查看sql server的实际执行计划就准确能定位是sql的问题,还是c#程序的问题,或者索引缺失的问题。另外服务器的IO或者其他因素。简单说,要分析的东西太多。我只能给你一个思路。根据你的描述,只能说达不到你的预期效果,至于是否真的慢,要对比。
因为这些是我家里的电脑上跑的效果,我现在回了老家,拿不到具体的数据。
不过你说的也有道理,可能我电脑只能达到这个速度了。 而我是想看能不能再优化一下。 我自己的电脑就是普通台式机,cpu是A8的。 数据有1千万多一点。现在是测试,感觉速度有点慢。
那 请教一下,对于这样的大的数据,怎么能更新的更快呢? 而且是一台电脑, 我现在update的时候,进行查询的话 ,update就卡住了。 这个要怎么解决呢? 十分感谢。
A8 是什么cpu?
如果测试环境与生产不一致,调试效率是没用的。不同的硬件性能不同的设置数据库的处理瓶颈都不一样。
#23
A8 是什么cpu?
如果测试环境与生产不一致,调试效率是没用的。不同的硬件性能不同的设置数据库的处理瓶颈都不一样。
A8是AMD的一款APU(集成了显卡)。
说的有道理,因为现在生产环境还在弄,测试遇到了问题,看看能不能解决。毕竟,正式环境中有可能出现这个问题。
#24
先结贴。 感谢各位的回复。。
等放服务器上看效果怎么样。或许就没有这样的问题了。
等放服务器上看效果怎么样。或许就没有这样的问题了。