我有一个包含大约 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 带来更大的压力,并最终可能导致内存问题。您可以很容易地使用 LIMIT
和 OFFSET
来处理这种事情,并且假设您的表已正确建立索引,它应该不会对性能造成太大影响。
关于php - 在 mysql 中排序 VS 已经排序的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35273491/