首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用大小写更新多行将花费永远的时间。

问用大小写更新多行将花费永远的时间。
EN

Stack Overflow用户
提问于 2013-12-28 10:02:20
回答 1查看 51关注 0票数 0

我试图用以下PHP代码更新表的多行。main_key是主键,显然是索引的。我多次尝试运行该代码,每次运行它都会在那里停留很长时间。(我还没玩过让它运行超过10秒的游戏,以防它以某种方式破坏文件。)

我想更新很多行,但只是先用几行进行测试。

这张桌子有大约150万条记录。

代码语言:javascript
复制
$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());

当我将代码更改为像这样的普通单记录更新时,它会立即运行:

代码语言:javascript
复制
$query = "UPDATE myfile SET service_no = 484
          WHERE main_key = 72016";
mysql_query($query) or die(mysql_error());
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-28 13:10:20

还不清楚你想得到什么。

这两个查询非常不同。

要更新所有行吗?还是只有main_key为72016或985643的行?

第一个查询更新整个表(所有行)。

假设我们有下表:

代码语言:javascript
复制
|  MAIN_KEY | SERVICE_NO |
|-----------|------------|
|         1 |          1 |
|     72016 |          1 |
|    985643 |          1 |
| 111111111 |          1 |

对于具有service_no的行,第一个查询将一些值传递给main_key = 72016 or 985643列,并将NULL赋值给所有其他行。我不会慢下来,因为它正在更改整个表(所有行):

代码语言:javascript
复制
|  MAIN_KEY | SERVICE_NO |
|-----------|------------|
|         1 |     (null) |
|     72016 |        484 |
|    985643 |       1874 |
| 111111111 |     (null) |

第二个查询只更改具有mail_key = 72016的行,而不触及其他行--它跳过它们,因此速度更快:

代码语言:javascript
复制
|  MAIN_KEY | SERVICE_NO |
|-----------|------------|
|         1 |          1 |
|     72016 |        484 |
|    985643 |          1 |
| 111111111 |          1 |

看看这个演示:http://www.sqlfiddle.com/#!2/0e1c2/1

如果只想更改具有main_key = 72016 or 985643的行,而不想更改其他行,则使用以下查询:

代码语言:javascript
复制
  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

运行此查询后的表如下所示:

代码语言:javascript
复制
|  MAIN_KEY | SERVICE_NO |
|-----------|------------|
|         1 |          1 |
|     72016 |        484 |
|    985643 |       1874 |
| 111111111 |          1 |
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20813261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档