Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PHP与MySQL进行分页的最佳实践?_Php_Mysql_Performance_Pagination - Fatal编程技术网

通过PHP与MySQL进行分页的最佳实践?

通过PHP与MySQL进行分页的最佳实践?,php,mysql,performance,pagination,Php,Mysql,Performance,Pagination,在处理至少100万行的记录时,在性能方面,是否最好: 选择整个记录,例如,Select*FROM tbl然后使用array\u chunk()或array\u slice() 或 仅选择记录的一部分,例如,Select*FROM tbl LIMIT x每页?最好使用LIMIT。想想看。。即使您有1000000行,第一个也将获得所有。vs限制,每次只能获取您设定的号码 然后,您需要确保正确设置了偏移量,以便从表中获取下一组项目。最好使用“限制”。想想看。。即使您有1000000行,第一个也将获得所

在处理至少100万行的记录时,在性能方面,是否最好:

选择整个记录,例如,
Select*FROM tbl
然后使用
array\u chunk()
array\u slice()


仅选择记录的一部分,例如,
Select*FROM tbl LIMIT x
每页?

最好使用LIMIT。想想看。。即使您有1000000行,第一个也将获得所有。vs限制,每次只能获取您设定的号码


然后,您需要确保正确设置了偏移量,以便从表中获取下一组项目。

最好使用“限制”。想想看。。即使您有1000000行,第一个也将获得所有。vs限制,每次只能获取您设定的号码


然后,您需要确保正确设置了偏移量,以便从表中获取下一组项目。

我认为这取决于情况,如果表不太大,您可以使用memcache将整个响应存储在内存中,这样可以避免HDD请求,这会更耗时,但由于您不知道用户是否会查找大量页面,因此最好使用SQL进行限制。

我认为这取决于情况,如果您的表不太大,您可以使用memcache将整个响应存储在内存中,这样可以避免更耗时的HDD请求,但您不知道用户是否会查找大量页面,最好用SQL来限制它。

这取决于具体情况

  • 此表中的数据是否经常更改
  • 是->您需要查询数据库

  • 数据库是否很大且经常更改
  • 然后使用一些搜索引擎,比如Elasticsearch,不要查询数据库,只需填充搜索引擎即可

  • 数据库很小,但查询需要很长时间吗
  • 使用某种缓存,比如redis/memcache

    这取决于你的需要。

    这取决于你的需要

  • 此表中的数据是否经常更改
  • 是->您需要查询数据库

  • 数据库是否很大且经常更改
  • 然后使用一些搜索引擎,比如Elasticsearch,不要查询数据库,只需填充搜索引擎即可

  • 数据库很小,但查询需要很长时间吗
  • 使用某种缓存,比如redis/memcache


    这真的取决于你的需要。

    最好的方法取决于你的环境。如果选择直接使用数据库,请注意以下问题:

    当您进入后面的页面时,NaiveLimit方法会给您带来问题。按某个键限制偏移量排序,页面大小的工作方式如下-遍历键,遍历第一个偏移量记录,然后返回页面大小记录。所以检查了偏移量+页面大小记录,如果偏移量高,则会出现问题

    更好-记住当前页面的最后一个键值。获取下一页时,请按如下方式使用:

    SELECT * FROM tbl WHERE the_key > $last_key ORDER BY the_key ASC LIMIT $page_size
    

    如果您的密钥不唯一,请通过在末尾添加额外的唯一ID列使其唯一。

    最佳方法取决于您的上下文。如果选择直接使用数据库,请注意以下问题:

    当您进入后面的页面时,NaiveLimit方法会给您带来问题。按某个键限制偏移量排序,页面大小的工作方式如下-遍历键,遍历第一个偏移量记录,然后返回页面大小记录。所以检查了偏移量+页面大小记录,如果偏移量高,则会出现问题

    更好-记住当前页面的最后一个键值。获取下一页时,请按如下方式使用:

    SELECT * FROM tbl WHERE the_key > $last_key ORDER BY the_key ASC LIMIT $page_size
    

    如果您的密钥不唯一,请在末尾添加一个额外的唯一ID列,使其唯一。

    这实际上取决于上下文

    通常,您希望大量使用索引来从一个大数据集中快速选择所需的内容。通过编程语言分页也比使用数据库更快。数据库经常会遇到瓶颈。对于一个每分钟有100个查询的应用程序,我们必须这样做。需要限制对数据库的点击,因此我们需要返回数据集,这些数据集可能不需要再查询数据库,大约100个结果,然后在应用程序中按25分页


    通常,使用这些索引对结果进行索引和缩小范围,如果性能是db上大量活动的关键,则调整db和代码,通过在应用程序中分页来减少I/O和db命中率。当服务器负载为12而I/O使用率为20时,您就会知道为什么。你需要点击手术台的状态

    这实际上取决于上下文

    通常,您希望大量使用索引来从一个大数据集中快速选择所需的内容。通过编程语言分页也比使用数据库更快。数据库经常会遇到瓶颈。对于一个每分钟有100个查询的应用程序,我们必须这样做。需要限制对数据库的点击,因此我们需要返回数据集,这些数据集可能不需要再查询数据库,大约100个结果,然后在应用程序中按25分页


    通常,使用这些索引对结果进行索引和缩小范围,如果性能是db上大量活动的关键,则调整db和代码,通过在应用程序中分页来减少I/O和db命中率。当服务器负载为12而I/O使用率为20时,您就会知道为什么。你需要点击手术台的状态

    @RyanVincent因为性能是主题,所以假设记录很大。@RyanVincent你为什么一直删除你的记录comments@RyanVincent因为性能是主题,所以假设记录较大。@RyanVincent为什么要不断删除注释,这比使用
    偏移量
    要好。是的,这比使用偏移量要好。