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


PHP vs MySQL getting random - query vs read from file - performance

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

我需要能够从不同的文件拉1或更多的随机行。

我现在做这个…

$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数据库并执行该查询是否真的有那么多的性能增益?

谢谢!

根据我的经验,当您没有太多信息时,从文件中检索信息比从数据库中检索信息要快得多。在我的例子中,我有一些文件,我在其中存储带有房屋类型的数组,从文件中获取它会更快。文件大约只有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;

您将获得经过的微秒的输出。

将其放入数据库中应该比读取整个文件并进行改组更快。但是您必须将这些数据插入数据库,这将产生额外的工作负载。你应该手动检查,哪个选项更快。

但是还要记住一件事。当你有大文件时,那么内存的使用可能会很大,所以你也应该考虑一下。

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