Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.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 无论哪一个使脚本更慢(我有两个选择)_Php - Fatal编程技术网

Php 无论哪一个使脚本更慢(我有两个选择)

Php 无论哪一个使脚本更慢(我有两个选择),php,Php,我在数据库中有一个名为ads的表,这个表包含每个广告的数据。 我想从表中获取数据以显示广告 现在,我有两个选择: 或者从表中获取所有数据并将其存储在数组中,然后,我将处理这个数组,通过使用循环在其位置显示每个广告。 或者直接访问表并获取每个ad数据来显示它,注意这种方式将消耗更多对数据库的查询。 哪种方法是最好的,而且不会使脚本变得更慢?我想强调以下部分: 从表中获取所有数据并将其存储在数组中 不需要将所有行存储到数组中。您还可以使用表示结果集的迭代器,然后使用该迭代器 根据您使用的数据库对象,

我在数据库中有一个名为ads的表,这个表包含每个广告的数据。 我想从表中获取数据以显示广告

现在,我有两个选择:

或者从表中获取所有数据并将其存储在数组中,然后,我将处理这个数组,通过使用循环在其位置显示每个广告。 或者直接访问表并获取每个ad数据来显示它,注意这种方式将消耗更多对数据库的查询。
哪种方法是最好的,而且不会使脚本变得更慢?

我想强调以下部分:

从表中获取所有数据并将其存储在数组中

不需要将所有行存储到数组中。您还可以使用表示结果集的迭代器,然后使用该迭代器

根据您使用的数据库对象,这通常是内存占用较少的变体。另外,您在这里只运行一个查询,这是最好的

迭代器实际上在现代数据库结果对象中很常见


此外,这有助于将视图代码与实际数据库交互分离,您还可以推迟执行SQL查询。

您应该尽量减少查询量,但也应该尽量减少实际从数据库获取的数据量

所以:只获取那些你实际展示的广告。例如,您可以在1、2、3、4中使用columnPK来获取这些广告

一个值得注意的例外:如果您的应用程序以广告为中心,并且您几乎到处都需要广告,并且/或者它们不消耗太多内存,并且/或者没有太多的添加,那么将所有广告或广告的子集存储在一个数组中可能会更好

最重要的是:测量,测量,测量


很难预测哪种算法最有效。通常,您实现某些功能是因为只有在以后发现您的优化实际上降低了应用程序的速度时,它才会更有效。

在大多数情况下,1会更好

因为,如果可以在一个查询中选择所需的最小数据集, 这样,到数据库服务器的往返次数就会减少

从内存访问数组或Objectproperties通常比DB查询更快。 您也可以考虑准备数据,不要将视图与视图输出混合使用。 如果需要延迟加载,则第二个选项select on demand可能有意义,
可能是因为您可以或希望识别客户端属性,如视口。

您应该始终尝试使用尽可能少的数据库查询运行PHP脚本。无论何时查询数据库,通常都必须通过网络向数据库发送请求,并且在请求返回之前,脚本将处于空闲状态

但是,您应该确保从数据库请求的数据不超过需要的数量。因此,尝试在WHERE子句中尽可能多地进行过滤,而不是请求整个表,然后在PHP层上选择单独的行


当您告诉我们您的表的外观以及如何选择要显示的广告时,我们可以帮助您编写SQL查询。

您对数据库执行的查询越少越好,所以选择第一个选项。每当您认为只有两个选项时,您通常会忽略某些内容。例如,使用更高效的SQL查询只从数据库中获取所需内容。请参阅下面的答案。谢谢@Nelson的回答。谢谢你的回答,但我想要一个直接的答案。哪一种是最好的方式,第一种方式还是第二种方式?我将使用我的第一次否决票。您是说从表中获取所有数据并将其存储在数组中在大多数情况下更好?也许在开发过程中会出现这种情况,但一旦你投入生产并将前500万个广告插入数据库,你的数据库管理员就会来找你。嗯……我说了什么?请不要引用没有上下文的部分。我说的是一个查询所需的最小集合结果:带条件选择,并限制列是基本sql知识的位置。谢谢你的回答,但我想要一个直接的答案。哪一种是最好的方式,第一种方式还是第二种方式?当你的数据库中没有比你现在显示的网站中嵌入的广告更多的广告时,第一种方式更好。当您需要从大量选择中选择一个或多个广告时,这两个选项都同样糟糕,您需要愿意学习如何编写SQL查询。谢谢您的回答,我也从您的回答中受益。谢谢您的回答,但我想要一个直接的回答。哪一种是最好的方法,第一种方法还是第二种方法?测量两种方法是唯一确定的方法。哪种方式最快取决于无数事情:哪个数据库?有哪些索引?我们在谈论多少数据?select语句看起来怎么样?谢谢你的回答,但我想要一个直接的答案。哪一个是最好的方式,最好的方式
第一条路还是第二条路?我想@pce对此很清楚,对吧?我的回答只是想开阔你的视野,但看起来你不想这样: