Php mysql中的排序与已排序数组

Php mysql中的排序与已排序数组,php,mysql,arrays,sorting,Php,Mysql,Arrays,Sorting,我有一个MySQL表,大约有10000个条目。我想表示这些按名称排序的条目。页面一次只能显示20个条目 我的问题是,这样做更有效吗 让数据库对其进行排序,这意味着使用排序、限制、选择查询加载相应的20个条目 还是应该 对条目列表进行一次排序,将它们保存在文件的数组中,加载文件,然后只查看20个感兴趣的索引 对我来说这两个都很糟糕。我不希望在用户每次加载页面时,仅为了显示20个条目而对包含10000个条目的数据库进行排序,也不希望加载包含10000个以上条目的数组来访问相应的20个条目 备

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

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

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

  • 对条目列表进行一次排序,将它们保存在文件的数组中,加载文件,然后只查看20个感兴趣的索引
对我来说这两个都很糟糕。我不希望在用户每次加载页面时,仅为了显示20个条目而对包含10000个条目的数据库进行排序,也不希望加载包含10000个以上条目的数组来访问相应的20个条目


备注:我不是问或-我想知道是否最好对数据库进行预排序,将其保存在数组中,然后加载包含所有条目的完整排序数组。

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

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

如果保存文件,然后更新表,会发生什么情况?文件中将缺少一些行。您也不能保证在文件中存储行实际上会更快。如果表没有太多更新,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带来更大的压力,并可能最终导致内存问题。您可以很容易地使用
LIMIT
OFFSET
来处理此类问题,并且假设您的表索引正确,则不会对性能造成太大影响。

不清楚您的问题与已经得到一些很好答案的问题有何不同。对于如此小的数据集,我怀疑这有多大区别。嗯,这实际上取决于用户。如果您的大多数用户将在分页中逐页浏览,那么将结果存储在一个数组中是有意义的,因为这样可以加快交互速度,在这种情况下使用AJAX可能更好。@drmonkeynija区别在于我正在考虑对数组进行预排序——我的意思是,当有人调用页面时,数组已经排序并保存在类似my_ready_saved_array.php的文件中。因此,我的优势是,我不需要浪费时间进行排序,但我必须加载一个巨大的数组。