我试图用以下PHP代码更新表的多行。main_key是主键,显然是索引的。我多次尝试运行该代码,每次运行它都会在那里停留很长时间。(我还没玩过让它运行超过10秒的游戏,以防它以某种方式破坏文件。)
我想更新很多行,但只是先用几行进行测试。
这张桌子有大约150万条记录。
$query = "UPDATE myfile SET service_no =
(CASE main_key
WHEN 72016 THEN 484
WHEN 985643 THEN 1874
END)";
mysql_query($query) or die(mysql_error());当我将代码更改为像这样的普通单记录更新时,它会立即运行:
$query = "UPDATE myfile SET service_no = 484
WHERE main_key = 72016";
mysql_query($query) or die(mysql_error());发布于 2013-12-28 13:10:20
还不清楚你想得到什么。
这两个查询非常不同。
要更新所有行吗?还是只有main_key为72016或985643的行?
第一个查询更新整个表(所有行)。
假设我们有下表:
| MAIN_KEY | SERVICE_NO |
|-----------|------------|
| 1 | 1 |
| 72016 | 1 |
| 985643 | 1 |
| 111111111 | 1 |对于具有service_no的行,第一个查询将一些值传递给main_key = 72016 or 985643列,并将NULL赋值给所有其他行。我不会慢下来,因为它正在更改整个表(所有行):
| MAIN_KEY | SERVICE_NO |
|-----------|------------|
| 1 | (null) |
| 72016 | 484 |
| 985643 | 1874 |
| 111111111 | (null) |第二个查询只更改具有mail_key = 72016的行,而不触及其他行--它跳过它们,因此速度更快:
| MAIN_KEY | SERVICE_NO |
|-----------|------------|
| 1 | 1 |
| 72016 | 484 |
| 985643 | 1 |
| 111111111 | 1 |看看这个演示:http://www.sqlfiddle.com/#!2/0e1c2/1
如果只想更改具有main_key = 72016 or 985643的行,而不想更改其他行,则使用以下查询:
UPDATE myfile SET service_no =
CASE main_key
WHEN 72016 THEN 484
WHEN 985643 THEN 1874
END
WHERE main_key IN ( 72016, 985643 );如果在main_key上创建了一个索引,这个查询将更快,因为它跳过了72016,985643以外的其他行。
请参阅本演示中的第三个查询:http://www.sqlfiddle.com/#!2/0e1c2/1
运行此查询后的表如下所示:
| MAIN_KEY | SERVICE_NO |
|-----------|------------|
| 1 | 1 |
| 72016 | 484 |
| 985643 | 1874 |
| 111111111 | 1 |https://stackoverflow.com/questions/20813261
复制相似问题