php - 在 mysql 中排序 VS 已经排序的数组

标签 php mysql arrays sorting

我有一个包含大约 10000 个条目的 MySQL 表。我想表示按名称排序的这些条目。该页面一次只能显示 20 个条目。

我的问题是,是否更有效

  • 让数据库对其进行排序,这意味着使用排序、限制、选择查询加载相应的 20 个条目。

或者应该是

  • 对条目列表进行一次排序,将它们保存在文件中的数组中,加载文件并只查看感兴趣的 20 个索引。

我觉得两者都很糟糕。我不想在每次用户加载页面时只显示 20 个条目时对包含 10000 个条目的数据库进行排序,我也不想加载一个包含超过 10000 个条目的数组以访问相应的 20 个条目。

备注:我不是问is php sort better than mysql "order by"?database sort vs. programmatic java sort - 我想知道是否最好对数据库进行预排序,将其保存在数组中,然后加载包括所有条目的完整排序数组。

最佳答案

这取决于你所说的“更好”是什么意思。

是什么让事情变得更好?速度、简单性、多功能性?

如果保存文件然后更新表会发生什么?您将丢失文件中的一些行。您也不能保证将行存储在文件中实际上会更快。如果表更新不多,MySQL 可以非常擅长缓存。

话虽这么说,如果速度对您来说那么重要,我会看看 Memcached 或 Redis。这两者都是 key 对数据的存储方案,都是将数据存储在内存中。你可以做这样的事情来实现 memcached:

function getTableRows()
{
    $memcached = & get_memcached_instance();
    $result = $memcached->get("myTableRows");
    if (! is_array($result)) {
        $result = $this->model->fetchSortedRowsFromDb();
        $memcached->put("myTableRows", $result);
    }
    return $result;
}

然后您可以只使用所需的索引进行分页。请记住,每次更新表时都必须删除缓存。

不过,是否需要如此大的速度提升?随着您的表中的行越来越多,它会给 PHP 带来更大的压力,并最终可能导致内存问题。您可以很容易地使用 LIMITOFFSET 来处理这种事情,并且假设您的表已正确建立索引,它应该不会对性能造成太大影响。

关于php - 在 mysql 中排序 VS 已经排序的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35273491/

相关文章:

java - 基于公共(public)类变量对 2 个类数组进行排序

java - 命名约定或目录结构

mysql - LEFT JOIN 到 INNER JOIN 多个表

arrays - 如何每次都以相同的方式对数组进行洗牌?

mysql - Hibernate 选择空对象

php - 为什么我的 tmp_file_upload 文件不存在?我正在使用 php 5.6

javascript - 如何判断一个javascript变量是否是一个数组并且只是一个数组

php - 这些编码和解码 PHP session 的方法的安全性

php - 大文件解析导入 PHP MySQL

javascript - 为一个 DataTable 行禁用 CSS