我有一个包含大约10000个条目的MySQL表。我想表示按名称排序的这些条目。该页面一次只能显示20个条目。
我的问题是,
效率更高或者应该是
对我来说这两件事都很糟糕。每次用户加载页面时,我不想对包含10000个条目的数据库进行排序,只是为了显示20个条目,我也不想加载包含超过10000个条目的数组来访问相应的20个条目。
备注:我不是要求is php sort better than mysql "order by"?或database sort vs. programmatic java sort - 我想知道预先分配数据库是否更好,将其保存在数组中然后加载包括所有条目的完整排序数组。
答案 0 :(得分:1)
这取决于你所说的“更好”。
是什么让事情变得更好?速度,简洁,多功能性?
如果您保存文件然后更新表会怎样?您将丢失文件中的某些行。您也无法保证将文件存储在文件中实际上会更快。如果表没有更新,MySQL可以很好地进行缓存。
话虽如此,如果速度对你很重要,我会看看Memcached或Redis。这两者都是用于密钥对数据的存储解决方案,其中数据存储在存储器中。您可以执行类似的操作来实现memcached:
public class Club
{
// Class to manage a single Club
[Key]
public int ClubID { get; set;
}//end Club
public class ClubEvent
{
[Key]
public int EventID { get; set; }
}
然后,您只能使用所需的索引进行分页。请记住,每次更新表时都必须删除缓存。
虽然需要提高速度吗?随着您的表越来越多,它会给PHP带来更多压力,最终可能导致内存问题。你可以很容易地使用function getTableRows()
{
$memcached = & get_memcached_instance();
$result = $memcached->get("myTableRows");
if (! is_array($result)) {
$result = $this->model->fetchSortedRowsFromDb();
$memcached->put("myTableRows", $result);
}
return $result;
}
和LIMIT
来处理这类事情,并假设你的表被正确编入索引,它不会给性能带来很大影响。