0

因此,假设我有一个可查询的数据库,其中包含 100 个数据对象。我想展示 3 个随机的。

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

方法一:

  • 使用 3 个随机 id 查询数据库mt_rand()

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

或者

方法二:

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

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

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

4

3 回答 3

3

如果您的 ID 列被索引,它可能应该是,然后做一个选择

WHERE id IN (1, 15, 67)

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

于 2013-01-25T18:16:26.977 回答
3

我确信方法1更好:

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

希望这会有所帮助;)

于 2013-01-25T18:16:37.780 回答
1

方法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';
于 2013-01-25T18:16:29.790 回答