php - 哪个更快/更有效 - 许多小的 MySQL 查询或一个大的 PHP 数组?

标签 php mysql arrays performance

我有一个基于 PHP/MySQL 的 Web 应用程序,它通过名为 language_strings 的 MySQL 表提供国际化支持,其中包含 string_idlang_idlang_text 字段。

当我需要以所选语言显示字符串时调用以下函数:

public function get_lang_string($string_id, $lang_id)
    {
        $db = new Database();
        $sql = sprintf('SELECT lang_string FROM language_strings WHERE lang_id IN (1, %s) AND string_id=%s ORDER BY lang_id DESC LIMIT 1', $db->escape($lang_id, 'int'), $db->escape($string_id, 'int'));
        $row = $db->query_first($sql);

        return $row['lang_string'];
    }

这非常有效,但我担心可能会进行大量数据库查询。例如主菜单有5个链接文本,都调用了这个函数。

将所选 lang_id 的整个 language_strings 表结果加载到 PHP 数组中,然后从函数中调用它会更快吗?可能这将是一个巨大的数组,其中大部分都是冗余的,但显然这将是每个页面加载一个数据库查询而不是很多。

谁能建议另一种更有效的方法?

最佳答案

没有不区分大小写的答案。您可以根据具体情况逐个分析。话虽如此,但大多数情况下,在一个查询中获取所有数据、将其弹出到数组或对象中并从那里引用它会更快。

需要注意的是,您能否在一个查询中提取所需的所有数据,就像运行五个单独的查询一样快。这就是查询本身的性能发挥作用的地方。

有时包含一两个子查询的查询实际上比单独运行几个查询的时间效率低。

我的建议是测试一下。将一个查询放在一起,获取您需要的所有数据,看看执行需要多长时间。对其他五个查询中的每一个进行计时,看看它们加在一起需要多长时间。如果几乎相同,则将输出粘贴到一个数组中,这样会更高效,因为不必频繁连接到数据库本身。

但是,如果您的组合查询需要更长的时间来返回数据(例如,它可能会导致全表扫描而不是使用索引),那么坚持使用单独的查询。

最后,如果您要反复使用相同数据 - 数组或对象每一次都会胜出,因为访问它会快得多而不是从数据库中获取它。

关于php - 哪个更快/更有效 - 许多小的 MySQL 查询或一个大的 PHP 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12051334/

相关文章:

javascript - 有效地将 $.ajax 与 php 结合使用的问题

php - MySQL,SQL查询多行

php - MySQL 只插入两个字段

javascript - 获取未匹配到单个数组的数组元素的结果

c++ - 如何获取输入的某些元素?

arrays - bash 将 XML 解析为多维数组

PHP登录系统,如何保护它

php - 如何在 symfony 中禁用缓存

php - 使用 PHP 移动 MySQL 行

MySQL 不在子查询中