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

时间:2016-02-08 15:42:16

标签: php mysql arrays sorting

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

我的问题是,

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

或者应该是

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

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

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

1 个答案:

答案 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来处理这类事情,并假设你的表被正确编入索引,它不会给性能带来很大影响。