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


sorting in mysql VS already sorted array

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

我的问题是,它更有效率吗

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

还是应该宁愿

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

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

备注:我不是在问php排序比mysql"order by"更好吗?或数据库排序与编程Java排序 - 我想知道是否最好预处理数据库,将其保存在数组中,然后加载包括所有条目的完整排序数组。

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

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

如果保存文件,然后更新表,会发生什么情况?文件中将缺少一些行。您也不能保证将行存储在文件中实际上会更快。如果表更新不多,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来处理此类事情,并且假设您的表已正确索引,它应该不会对性能造成太大影响。