我有两个表,目前一个A表是2~3万的数据, 一个B表是大约15000的数据。以后数据会更多的多,应该都能达到几十万数据。
每个秒都有十来个字段,其中都有IMAGE字段。不过我UPDATE的时候是不更新IMAGE字段的。
现在有一个动作要UPDATE这两个表N条记录。N可能是1~500,常规操作一次大约是10~50条。
可是每次执行都要好几秒钟(目前大多是5~9秒)(目前在测试,不是专业服务器,是一台PC单独 SQLSERVER)我想问一下怎么UPDATE的的效率更高?UPDATE A SET F1=XXXX, F2=SSSS, F3=XXXX WHERE PID IN [123,258,687,589,12,109...]
UPDATE A SET F1=XXXX, F2=XXXX, F3=XXXX WHERE PID=123 OR PID=258 OR PID 687.........
F1 是 VARCHAR  F2是NUM  F3是 INT
这两种方式有差别么?
还是应该用其他方法?? 谢谢。  我觉得这么点记录应该用不了这么长时间啊  其他类似的数据库操作多条记录的也没感觉很慢。就是这一步操作很费时间。
偶尔有时候UPDATE一条记录都要5秒多才返回。我在代码中注释掉 这两个表的UPDATE操作就明显快了很多啊。

解决方案 »

  1.   

    目前我操作的字段没索引,只有一个OWID字段有索引,但是我的操作用不到OWID。
      

  2.   

    关键是你要根据条件建立索引,也就是PID要建立索引,这样速度会快很多
    假如PID已经是Key,那就没有必要建立索引了,感觉还是In好些,如果想测试的话,可以写一个程序自己测一下执行时间
      

  3.   

    用IN的效率一般不高,不过当范围中确定值多时,似乎都用IN
    楼下:
      

  4.   

    1.正如2楼说的,如果pid不是主键,建立该字段索引
    2.in的效率低吧,将in改成别的,exist
      

  5.   

    怎么都喜欢在更新频繁的表里建索引,我试过,在有几百万条记录第表里建立索引后update 所有记录的一个字段比没索引慢了近10倍
    http://hi.baidu.com/%EE%B8%EE%B8/blog/item/0ba1ed037edb0e713912bbea.html
    8、索引的设计       在设计阶段,可以根据功能和性能的需求进行初步的索引设计,这里需要根据预计的数据量和查询来设计索引,可能与将来实际使用的时候会有所区别。       关于索引的选择,应改主意:       A、根据数据量决定哪些表需要增加索引,数据量小的可以只有主键。       B、根据使用频率决定哪些字段需要建立索引,选择经常作为连接条件、筛选条件、聚合查询、排序的字段作为索引的候选字段。       C、把经常一起出现的字段组合在一起,组成组合索引,组合索引的字段顺序与主键一样,也需要把最常用的字段放在前面,把重复率低的字段放在前面。       D、一个表不要加太多索引,因为索引影响插入和更新的速度。
      

  6.   

    目前除了 主键OWID 有索引 就是我这个PID有索引了