• MySQL分表后,如何做分页查询?


    随着项目运行的时间越来越长,有些数据的存储也会越来越大,比如一些点击量,浏览量量,单表的数据可以到达上千万条数据,这时候会存在单表数据过大,查询效率低的问题。

    为了提高查询效率这时候需要对单表进行拆分,比如一张1000万条数据的表,我们需要把它拆分为10张表,一张表就需要100万,mysql中单表都有一个最大存储的阈值,数据量不能超过这个值;

    分表之间,我们需要去生产一个上万条的数据的表,这里我生产了如下的数据:

    图片

    我需要对这张表进行拆分多张,我这里拆分了2张表;

    第一步:

    表一:

    1. DROP table IF EXISTS tb_member1;
    2. create table tb_member1(
    3.     id bigint primary key auto_increment ,
    4.     name varchar(20),
    5.     age tinyint not null default '0'
    6. )ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

    表二:

    1. DROP table IF EXISTS tb_member2;
    2. create table tb_member2(
    3.     id bigint primary key auto_increment ,
    4.     name varchar(20),
    5.     age tinyint not null default '0'
    6. )ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

    接下来开始进行拆分:

    1. insert into tb_member1(id,name,sex) select id,name,sex from dd_user where id%2=0;
    2. insert into tb_member2(id,name,sex) select id,name,sex from dd_user where id%2=1;

    数据被分为:

    图片

    图片

    这时候表基本是已经拆分完成。

    接下来,我们需要考虑的是一张user表被拆分成2张表,那分页如何实现呢?

    第一步:

    创建一个主表:

    1. DROP table IF EXISTS tb_member_all;
    2. create table tb_member_all(
    3. id bigint primary key auto_increment ,
    4. name varchar(20),
    5. age tinyint not null default '0'
    6. )ENGINE=MERGE UNION=(tb_member1,tb_member2) INSERT_METHOD=LAST CHARSET=utf8 AUTO_INCREMENT=1 ;

    执行上述出现如下问题:

    1. ERROR 1168 (HY000): Unable to open underlying table which is differently defined
    2. or of non-MyISAM type or doesn't exist

    需要检查:

    1. 查看上面的分表数据库引擎是不是MyISAM.

    2. 查看分表与指标的字段定义是否一致。

    上述的都成功以后,我们会发现,你在member1或者member2中创建数据member_all表中也会出现同样的数据

    所以:tb_member_all表就是tb_member1tb_member2并集,刚刚实现到这里,我也没理解,后来看了一些文档,了解了一下:

    图片

    其实tb_member_all表里面是没有存储数据,它就是一个外壳,里面的数据是tb_member1tb_member2的并集,数据的存储是放在分表中;

    图片

    图片

    图片

    这时候,我们就豁然开朗了,利用这个tb_member_all,我们就可以实现数据查询的分页;

    java代码实现:

    图片

    id%2这是取模处理,分配数据进入哪个数据;

    我们在做分页的时候就利用tb_member_all表去做分页查询实现

    图片

    图片

    图片

    测试结果:

  • 相关阅读:
    7. Java本项目知识基础---上篇
    【Fastadmin/ThinkPHP5】使用Queue队列方法详细步骤
    最新基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法
    [论文|实验]HRNet
    分层强化学习 综述论文阅读 Hierarchical Reinforcement Learning: A Comprehensive Survey
    云的灵魂是人工智能
    M365 E5 Insider Risk Management详细部署方案
    k8s-----数据存储
    干货!半监督预训练对话模型 SPACE
    【开源】给ChatGLM写个,Java对接的SDK
  • 原文地址:https://blog.csdn.net/m0_73311735/article/details/127586871