【问题标题】:sorting in mysql VS already sorted array在 mysql 中排序 VS 已经排序的数组
【发布时间】:2016-05-18 08:13:32
【问题描述】:

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

我的问题是,这样做是否更有效率

  • 让数据库对其进行排序,即通过排序、限制、选择查询加载对应的20个条目。

或者应该是一个

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

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

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

【问题讨论】:

  • 不清楚您的问题与已经收到一些好的答案的question you refer to 有何不同。
  • 对于这么小的数据集,我怀疑它有什么不同。
  • 嗯,这真的取决于用户。如果您的大多数用户会在您的分页中逐页浏览,那么将结果存储在数组中是有意义的,因为作为回报,这将使交互更快,在这种情况下使用 AJAX 可能会更好。
  • @drmonkeyninja 不同之处在于我正在考虑对数组进行预排序——我的意思是当有人调用页面时,数组已经排序并保存在 my_already_saved_array.php 之类的文件中。因此我的优点是我不需要浪费时间进行排序,但我必须加载一个巨大的数组。

标签: php mysql arrays sorting


【解决方案1】:

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

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

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

话虽如此,如果速度对您来说很重要,我会考虑 Memcached 或 Redis。这两者都是密钥对数据的存储解决方案,其中数据存储在内存中。你可以这样做来实现 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 来处理这种事情,并且假设你的表被正确索引,它应该不会对性能产生太大影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 2020-12-20
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多