性能是否有很大差异(PHP 循环)


Is there a big difference in performance (PHP loops)

假设我有一个包含 100 个数据对象的可查询数据库。我想显示 3 个随机的。

我没有任何工作代码,因为这是我刚刚想到的。

方法一:

  • 使用 mt_rand() 查询数据库中的 3 个随机 ID

所以基本上Query for IDs (1, 15, 67)然后打印每一个。

方法2:

  • 在循环中使用带有计数器的mt_rand()$counter = 0; $counter = ++$counter)

基本上Query ALL posts如果(ID = 1, 15, 67)然后打印每个,如果($counter = 3){ break; }

方法 2 听起来会给我一个讨厌的大对象。虽然方法 1 听起来像是一个更昂贵的数据库查询。我认为方法 1 会更好,但我不确定

如果您的 ID 列已编入索引(可能应该是索引),那么使用

WHERE id IN (1, 15, 67)

非常便宜。即使您的表中有更多行,它也会扩展。解决方案 2 在选择整个表并将其加载到内存中时不会缩放。

我相信方法 1 更好:

在方法 1 中,数据库引擎将遍历您的所有帖子以找到您需要的帖子,然后仅发送它选择的 3 个帖子。在方法 2 中,数据库引擎还将遍历您的所有帖子,然后发送一个更大的对象(包含您的所有帖子),这肯定会花费更多时间。

希望这对;)有所帮助

显然是

方法1。如果您适当地设置了索引,则不会是更昂贵的数据库查询。

如果你真的好奇,你可以找到自己的答案:

<?
$start = microtime();
doMethodOne();
$end = microtime();
echo 'Method 1 took ' . $end - $start . ' ms<br />';
$start = microtime();
doMethodTwo();
$end = microtime();
echo 'Method 2 took ' . $end - $start . ' ms';