PHP与MySQL获取随机 - 查询与从文件读取 - 性能

时间:2013-03-19 12:35:31

标签: php mysql performance

我有10个文件,每个文件包含50到250行。

我需要能够从不同的文件中提取一个或多个随机行。

我目前这样做......

$lines = file($filePath);
if ($number == "1") {
    return $lines[array_rand($lines)];
}
else {
    shuffle($lines);
    return array_slice($lines, 0, $number);
}

但是,我刚刚在这里阅读了一种使用MySQL做同样事情的方法:

https://stackoverflow.com/a/4329447/390480

我是否真的可以将这10个文件转移到MySQL数据库并执行该查询?

谢谢!

3 个答案:

答案 0 :(得分:2)

根据我的经验,当您没有太多信息时,从文件中检索信息比从数据库检索信息更快。在我的情况下,我有文件,我存储数组的房子类型,例如,从文件中获取它更快。这些文件只有大约10kb,而且性能提高了10倍,也许我的性能改进是错误的,但在定义上它足以让我删除那些包含这些行的表并使用文本文件xD。

确保性能的最佳方法是使用函数microtime()并以两种方式执行。然后,您可以通过自己的基准测试来看到性能。

我经常使用它:

$start = microtime(true);

// my code;
// If it's not a very long script, you should always put it inside a loop, let's say thousands times or more, depending on the script, because sometimes just the resources used by the system could vary the benchmark, as suggested by @Colin Morelli .

echo microtime(true) - $start;

你得到经过的微秒的输出。

答案 1 :(得分:0)

在数据库中创建它应该比读取整个文件并将其洗牌更快。但是您必须将此数据插入到数据库中,这将产生额外的工作量。你应该手动检查,哪个选项更快。

但要记住还有一件事。如果你有大文件,那么内存使用量可能很大,所以你也应该考虑它。

答案 2 :(得分:-1)

10 * 250 = 2500行 - 对MySQL来说没什么。你可以用这些数据做任何你想做的事情,一切都会很快。而且,数据库肯定比文件更快。此外,您可以将其存储在Redis中并使用SRANDMEMBER - 只是替代变体。