Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mySQL更新文本vs INT字段类型(速度性能)_Php_Mysql - Fatal编程技术网

Php mySQL更新文本vs INT字段类型(速度性能)

Php mySQL更新文本vs INT字段类型(速度性能),php,mysql,Php,Mysql,我需要在mySQL表中更新一个不确定的随机int/float数(最多32个) 在PHP中,我将它们放在一个数组中: $array['numbers'][1]=5.5; $array['numbers'][2]=2; $array['numbers'][3]=43; (...) +----+-----------------------------------+ | id | numbers(Text) | +----+------------------

我需要在mySQL表中更新一个不确定的随机int/float数(最多32个)

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

$array['numbers'][1]=5.5;
$array['numbers'][2]=2;
$array['numbers'][3]=43;
(...)
+----+-----------------------------------+
| id | numbers(Text)                     |
+----+-----------------------------------+
|  1 | a:3:{i:1;d:5.5;i:2;i:2;i:3;i:43;} |
+----+-----------------------------------+
+----+------------+------------+------------+---
| id | no1(int)   | no2(int)   | no3(int)   |  
+----+------------+------------+------------+---
|  1 | 5.5        | 2          | 43         |
+----+------------+------------+------------+---
mySQL场景1:

$array['numbers'][1]=5.5;
$array['numbers'][2]=2;
$array['numbers'][3]=43;
(...)
+----+-----------------------------------+
| id | numbers(Text)                     |
+----+-----------------------------------+
|  1 | a:3:{i:1;d:5.5;i:2;i:2;i:3;i:43;} |
+----+-----------------------------------+
+----+------------+------------+------------+---
| id | no1(int)   | no2(int)   | no3(int)   |  
+----+------------+------------+------------+---
|  1 | 5.5        | 2          | 43         |
+----+------------+------------+------------+---
mySQL场景2:

$array['numbers'][1]=5.5;
$array['numbers'][2]=2;
$array['numbers'][3]=43;
(...)
+----+-----------------------------------+
| id | numbers(Text)                     |
+----+-----------------------------------+
|  1 | a:3:{i:1;d:5.5;i:2;i:2;i:3;i:43;} |
+----+-----------------------------------+
+----+------------+------------+------------+---
| id | no1(int)   | no2(int)   | no3(int)   |  
+----+------------+------------+------------+---
|  1 | 5.5        | 2          | 43         |
+----+------------+------------+------------+---
要在这两种情况下更新这些字段,我知道id(它是INT auto_increment),因此我将包括其中的id=$known_id

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

注意:我也可以用空格分隔这些元素,并使用impolde()/explode(),但问题仍然是一样的。此外,我专注于更新,这意味着我不寻求速度性能的选择,等等

编辑:

$array['numbers'][1]=5.5;
$array['numbers'][2]=2;
$array['numbers'][3]=43;
(...)
+----+-----------------------------------+
| id | numbers(Text)                     |
+----+-----------------------------------+
|  1 | a:3:{i:1;d:5.5;i:2;i:2;i:3;i:43;} |
+----+-----------------------------------+
+----+------------+------------+------------+---
| id | no1(int)   | no2(int)   | no3(int)   |  
+----+------------+------------+------------+---
|  1 | 5.5        | 2          | 43         |
+----+------------+------------+------------+---

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

无论存储序列化数组还是多列,性能可能不会有显著差异,除非您有非常高的流量和长字符串

当数组太长以至于序列化字符串不能放在单个数据库页面上时,它会产生任何可测量的差异。InnoDB会自动找到额外的页面来存储字符串的其余部分,但这意味着会有更多的页面加载、更多的磁盘搜索等。为了避免页面溢出,序列化的字符串必须为768字节或更少(有关详细说明,请参阅)

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

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


请回复您的评论和更新:


听起来更新的数量和平均字符串长度都相当有限。这还不足以成为瓶颈。如果使用环回TCP/IP接口(127.0.0.1)进行连接,则不必担心带宽。

如果您想确定,可以对其进行基准测试。就数据库结构而言,两者都不是非常规范化的。在性能方面,我的猜测是没有什么不同。最大的好处是将索引添加到
id
。是的,它是索引的,并且也是唯一的。Helpfull!比尔,请检查我编辑的问题。谢谢。