添加更新SQL查询

添加更新SQL查询,sql,sql-update,Sql,Sql Update,我有一个脚本,每周更新一次。我从主机收到一条警告,我用脚本使服务器超载。我发现的问题是,我使用了太多的更新查询(8000多名用户每人一个) 我知道这是个糟糕的编码。因此,现在我需要将所有数据合并到一个SQL查询中,并一次更新所有数据。我希望这能解决我的问题 一个简短的问题。如果我添加纯添加更新查询,用分号分隔,如下所示: UPDATE table SET something=3 WHERE id=8; UPDATE table SET something=6 WHERE id=9; 然后用一个

我有一个脚本,每周更新一次。我从主机收到一条警告,我用脚本使服务器超载。我发现的问题是,我使用了太多的更新查询(8000多名用户每人一个)

我知道这是个糟糕的编码。因此,现在我需要将所有数据合并到一个SQL查询中,并一次更新所有数据。我希望这能解决我的问题

一个简短的问题。如果我添加纯添加更新查询,用分号分隔,如下所示:

UPDATE table SET something=3 WHERE id=8; UPDATE table SET something=6 WHERE id=9;
然后用一个大的SQL代码更新数据库,而不是每次更新都查询数据库,这样会更快,对吗


这是将更新语句“组合”在一起的最佳方式吗?这会显著降低服务器负载吗?

这将改善IO,因为只有一次往返,但数据库“努力”将是相同的。

这将改善IO,因为只有一次往返,但数据库“努力”将是相同的。

您最好的选择是按“某物”字段批处理这些语句:


当然,对您的需求一无所知,可能有更好的解决方案…

您最好的选择是按“某物”字段批处理这些语句:


当然,对您的需求一无所知,可能会有更好的解决方案…

用您的值创建一个带分隔符的文件,并使用与MySQL等效的文件。这将大大快于更新

LOAD DATA INFILE '/path/to/myfile'
REPLACE INTO TABLE thetable(field1,field2, field3)
//optional field and line delimiters
;

使用您的值创建一个带分隔符的文件,并使用MySQL的等效值。这将大大快于更新

LOAD DATA INFILE '/path/to/myfile'
REPLACE INTO TABLE thetable(field1,field2, field3)
//optional field and line delimiters
;

SQL的一个奇怪之处是下面的整数表达式 (1-abs(符号(A-B)))=1,如果A==B,则为0。为了方便起见,我们把这个表达式称为_eq(A,B)。 所以

更新表格设置某物=3*_eq(id,8)+6*_eq(id,9) 其中,id在(8,9)中


将使用单个update语句执行您想要的操作

SQL的一个奇怪之处是下面的整数表达式 (1-abs(符号(A-B)))=1,如果A==B,则为0。为了方便起见,我们把这个表达式称为_eq(A,B)。 所以

更新表格设置某物=3*_eq(id,8)+6*_eq(id,9) 其中,id在(8,9)中


将使用单个update语句执行您想要的操作

您有可用的存储过程吗?为什么要这样做?如果你能解释这个场景,也许会有更好的解决方案。我跑。它是一个mashup,每周从last.fm发送推特。因此,每周我都会更新数据并发送推文。我存储用户页的带名称。这就是为什么我每周都要更新用户数据。数据(新的更新值)来自何处,它以什么形式存在并可供您的程序访问?还有,您使用的是什么SQL DB?您是否有可用的存储过程?为什么必须这样做?如果你能解释这个场景,也许会有更好的解决方案。我跑。它是一个mashup,每周从last.fm发送推特。因此,每周我都会更新数据并发送推文。我存储用户页的带名称。这就是为什么我每周都要更新用户数据。数据(新的更新值)来自何处,它以什么形式存在并可供您的程序访问?还有,您使用的是什么SQL DB?然后您需要使用它执行独特的操作,在这种情况下,您需要独特的查询。是时候拿出你的信用卡,打电话给你的主机提供商了!然后你需要用它做一些独特的事情,在这种情况下你需要独特的查询。是时候拿出你的信用卡,打电话给你的主机提供商了!