zoukankan      html  css  js  c++  java
  • 记一次Mysql实战设计操作

    数据量很大时的分页设计

    随着业务的不断发展,可能会导致我们的数据数量会越来越庞大,一般我们会对数据进行分页查询。我们可以通过限制分页查询数量来提升查询效率,但是,当我们的页码横跨很大时,譬如,我当前在第一页,通常一页显示10条数据,假如我们总共有10W条数据,就有1w页。此时我想从第一页跳转到第5k页,如果我们还是用传统的分页模式,就会导致查询性能急速下降,这就违背了我们使用分页的初衷了。

    如何解决这种问题呢?

    利用主键自增以及主键索引快速定位页码(不推荐)

    当我们的主键id设置为自增时,由于整个表数据都是有序的,我们便可根据页码信息计算出数据的起始主键id,按照此方法就可以快速查询数据。不过此方案缺点也十分明显,显然,我们需要整张表数据的有效数据的主键都是连续自增的,这就导致在数据变动时,例如删除数据,我们需要维护整个表的主键id以重新达到连续的效果,反而增加了维护成本。

    通过业务层限制显示最大页码选择跨度(推荐)

    我们可以通过页面来控制用户可以跨度的最大页码范围,我了解到百度,谷歌等公司都是限制10页。也就是说最大允许用户从第一页跨度到第十页,这就完美解决了问题,并且不需要任何成本。

    如果你确实有这方面的需求:要对大数据进行分页查询。我建议使用子查询优化效率:

    SELECT * from orderitems limit 10 OFFSET 2000000;
    

    如上述代码,经优化可以拆成两行查询语句:

     SELECT id from orderitems limit 10 OFFSET 2000000;
     SELECT * from orderitems where id in (x,x,x,x,x,x,x,x,x,x);
    

    经测试,在有2kw+的数据表中可以提升性能5倍以上。

    表数据

    使用传统分页查询速度:

    使用拆分查询速度:

    (主要是查询id速度影响较大)

  • 相关阅读:
    python
    js 对嵌套页面的父页面进行跳转
    HTML 添加空格
    python
    python
    python
    面向对象编程基础(进阶4)
    Python模块(进阶3)
    Python函数式编程(进阶2)
    python进阶介绍(进阶1)
  • 原文地址:https://www.cnblogs.com/lovelylm/p/15028529.html
Copyright © 2011-2022 走看看