gpt4 book ai didi

php - mySQL UPDATE TEXT 与 INT 字段类型(速度性能)

转载 作者:行者123 更新时间:2023-11-29 03:00:35 33 4
gpt4 key购买 nike

我需要在 mySQL 表中更新一个不确定数量(最大:32 个)的随机整数/ float 。

在 PHP 中,我将它们放在一个数组中:

$array['numbers'][1]=5.5;
$array['numbers'][2]=2;
$array['numbers'][3]=43;
(...)

mySQL 场景 1:

+----+-----------------------------------+
| id | numbers(Text) |
+----+-----------------------------------+
| 1 | a:3:{i:1;d:5.5;i:2;i:2;i:3;i:43;} |
+----+-----------------------------------+

mySQL 场景 2:

+----+------------+------------+------------+---
| id | no1(int) | no2(int) | no3(int) |
+----+------------+------------+------------+---
| 1 | 5.5 | 2 | 43 |
+----+------------+------------+------------+---

为了在这两种情况下更新这些字段,我知道 id(这是 INT auto_increment)所以我将包括 WHERE id=$known_id

如果我序列化这些并更新场景 1,它在UPDATE 速度方面有什么不同吗?或者场景 2 是否明显更快,请记住它可能是 12、13、14 或更多字段?

注意:我也可以用空格分隔它们并使用 implode()/explode() 但问题仍然存在。此外,我专注于 UPDATE,这意味着我不是在寻找 SELECT 等的速度性能。

编辑:

数据库来自同一个主机服务器,我希望每 10 秒左右更新大约 5 到 50 行。此外,让我们将随机 int 数字的数量减少到 12,这样我们就可以将序列化字符串固定在 512 到 1024 个字符之间。

最佳答案

无论您存储序列化数组还是多列,都可能不会对性能产生显着影响,除非您的流量非常高且字符串很长。

它会产生任何可测量差异的情况是当您的数组太长以至于序列化字符串不适合单个数据库页面时。 InnoDB 自动找到额外的页面来存储字符串的其余部分,但这意味着更多的页面加载、更多的磁盘搜索等。为了避免页面溢出,序列化的字符串必须是 768 字节或更少(参见 Blob Storage in Innodb以获得对此的完整解释)。

另一个考虑因素是当您有一个很长的字符串并且您需要发布整个字符串只是为了更新数组的单个成员时。这些字节必须以某种方式通过网络传输,并且在使用序列化数组方法时无法仅发布一个子字符串。您的字符串越长,进行更新的开销就越大。最终,如果同时执行大量这些更新,您可能会耗尽所有网络带宽。

例如,千兆位网络 (1000Mbit/s) 的吞吐量约为 112 MB/s。如果您的字符串平均为 100KB,并且每秒有 1125 个并发更新,那么这就是您的全部带宽,即使在快速的专用网络上也是如此。这甚至不包括同一网络上的其他流量。


回复您的评论和更新:

听起来更新次数和平均字符串长度都非常适中。还不足以成为瓶颈。如果您使用环回 TCP/IP 接口(interface) (127.0.0.1) 进行连接,那么您不必担心带宽问题。

关于php - mySQL UPDATE TEXT 与 INT 字段类型(速度性能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24333287/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com