Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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中数据操作的速度_Php_Mysql_Class_Arrays_Methods - Fatal编程技术网

PHP与MySQL中数据操作的速度

PHP与MySQL中数据操作的速度,php,mysql,class,arrays,methods,Php,Mysql,Class,Arrays,Methods,如果这是一个愚蠢的问题,请提前道歉,但我想知道在下面的简化场景中,哪一个可能更快/更好 在users表中有注册用户,在countries表中有国家,大致如下所示: 用户表: 用户id主键,INT |国家id FK,TINYINT |其他用户相关字段 国家表: 国家/地区id主键,TINYINT |国家/地区名称VARCHAR |其他国家/地区相关字段 现在,每次我需要显示一个用户的国家,我需要做一个MySQL连接。然而,我经常需要做很多关于用户的其他加入,而且大的图片看起来很重 我想知道将国家从

如果这是一个愚蠢的问题,请提前道歉,但我想知道在下面的简化场景中,哪一个可能更快/更好

在users表中有注册用户,在countries表中有国家,大致如下所示:

用户表: 用户id主键,INT |国家id FK,TINYINT |其他用户相关字段

国家表: 国家/地区id主键,TINYINT |国家/地区名称VARCHAR |其他国家/地区相关字段

现在,每次我需要显示一个用户的国家,我需要做一个MySQL连接。然而,我经常需要做很多关于用户的其他加入,而且大的图片看起来很重

我想知道将国家从数据库中取出并将它们作为一个数组放入类中的利与弊是什么,我可以使用country_id通过公共方法调用轻松地从中检索它们?是否存在速度优势/劣势

非常感谢


编辑:谢谢所有的视图,非常有用。我会选择第一个答案作为公认的解决方案,尽管所有的贡献都是有价值的。

减少JOIN语句会减轻MySQL服务器的压力,但效果并不显著,因此世界上没有那么多国家。但是,您将不得不在PHP中实现JOIN yourself,这将弥补这段时间。而且,由于您是自己编写的,因此编写它的效率可能低于SQL语句,这意味着需要更多的时间。我建议将其保留在SQL server中,因为将其移出的好处非常少,而且如果PHP实例和MySQL实例位于同一个框中,则没有真正的好处。

减少JOIN语句将减轻MySQL服务器的压力,但这并不显著,因此世界上没有那么多国家。但是,您将不得不在PHP中实现JOIN yourself,这将弥补这段时间。而且,由于您是自己编写的,因此编写它的效率可能低于SQL语句,这意味着需要更多的时间。我建议将其保留在SQL server中,因为将其移出的好处非常少,如果PHP实例和MySQL实例位于同一个框中,则没有真正的好处。

您的建议应该更快。诚然,连接可能不会花费太多,但就计算能力而言,在字典中查找它应该是免费的


这实际上只是为了速度而牺牲内存。当然,我能看到的唯一缺点是存储国家信息的内存使用量增加,而且如果您更新国家表(可能不经常更新),则必须使缓存失效。

您的建议应该更快。诚然,连接可能不会花费太多,但就计算能力而言,在字典中查找它应该是免费的

这实际上只是为了速度而牺牲内存。我能看到的唯一缺点当然是存储国家信息的内存使用量增加,而且如果您更新国家表(可能不经常更新),则必须使该缓存无效。

您现在有严重的性能问题吗?我最近在为公司开发的一个php/mysql网站上进行了性能改进。某些方面的速度太慢,结果发现很多问题都是查询本身造成的。我使用计时器来判断哪些查询比较慢,然后重新组织它们并添加索引等。在一些情况下,创建两个单独的查询并在php中连接它们会更快。我有一些非常复杂的连接

在发现问题之前不要尝试优化。首先通过测量来确定您是否有问题,然后如果需要重新安排查询,您将能够知道您是否有改进。

您现在是否有严重的问题性能问题?我最近在为公司开发的一个php/mysql网站上进行了性能改进。某些方面的速度太慢,结果发现很多问题都是查询本身造成的。我使用计时器来判断哪些查询比较慢,然后重新组织它们并添加索引等。在一些情况下,创建两个单独的查询并在php中连接它们会更快。我有一些非常复杂的连接


在发现问题之前不要尝试优化。首先通过测量来确定您是否有问题,然后如果您需要重新安排查询,您将能够知道您是否有改进。

我认为删除连接不会带来任何好处,因为您必须迭代所有结果行并手动查找国家名,我怀疑这会比MySQL更快

我也不会考虑这样的做法,理由如下:如果你想改变一个国家的名字,就说你已经改变了。 如果输入错误,只需更新数据库中的一行即可。但是,如果PHP代码中包含国家的名称,则必须重新部署代码才能进行更改。我不懂PHP,但这可能不会比生产系统中的DB更改更直接


因此,出于可维护性的原因,我不想让DB来做这项工作。

我认为删除连接不会带来任何好处,因为您必须迭代所有结果行并手动查找国家名称,我怀疑这比MySQL更快

我也不会考虑这样的方法,原因如下:如果你想改变一个国家的名字,比如说你有一个打印错误,你可以通过更新数据库中的一行来完成。但是,如果PHP代码中包含国家的名称,则必须重新部署代码才能进行更改。我不懂PHP,但这可能不会比生产系统中的DB更改更直接


因此,出于可维护性的原因,IMHO让DB来做这项工作。

数据库世界的一般规则是首先规范化更多表中的结果,然后解决性能问题

您将只希望为了代码的简单性而非性能而进行非规范化。使用索引和存储过程。DBMS旨在优化连接


不进行规范化的原因是,每次修改数据库设计时,您都必须修改已经编写的代码。

数据库世界的一般规则是先进行规范化,然后生成更多的表,并解决性能问题

您将只希望为了代码的简单性而非性能而进行非规范化。使用索引和存储过程。DBMS旨在优化连接


不进行规范化的原因是,每次修改数据库设计时,您都必须修改已经编写的代码。

您的意思是在PHP文件中而不是在数据库中写入国家?是的,在PHP文件中而不是在数据库中写入国家。您的意思是在PHP文件中而不是在数据库中写入国家?是的,在php文件中而不是数据库中。当然。。。。现在我正在设计一个尚未实现的新解决方案,但它似乎还有很多其他东西将基于它,所以我宁愿按照正确的方向构建它,而不必在以后进行根本性的重新设计。啊,在这种情况下,我觉得在mysql中使用它会更快。在查询中,不太可能有一个您希望进行外部联接的国家列表,或者对国家表进行任何奇怪的操作。您可能只想加入国家ID或从db中提取国家列表。前者可以实现非常快速的查询,后者可以通过缓存来加速。当然。。。。现在我正在设计一个尚未实现的新解决方案,但它似乎还有很多其他东西将基于它,所以我宁愿按照正确的方向构建它,而不必在以后进行根本性的重新设计。啊,在这种情况下,我觉得在mysql中使用它会更快。在查询中,不太可能有一个您希望进行外部联接的国家列表,或者对国家表进行任何奇怪的操作。您可能只想加入国家ID或从db中提取国家列表。前者可以实现非常快速的查询,后者可以通过缓存来加速。