前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql分表+分页查询

mysql分表+分页查询

作者头像
用户10002156
发布2023-08-07 11:28:11
4440
发布2023-08-07 11:28:11
举报
文章被收录于专栏:生活处处有BUG

背景

我们都知道,数据量大了,都要对数据库进行分库分表。奈何一直对分表及分表查询没什么概念,这里先不讲那么多概念,先直接演示一个demo。我们直接上车,请坐稳扶好。

分表

创建一个测试的数据库,并创建一个用户表

代码语言:javascript
复制
create database test;
use test;

create table tb_member(
    id bigint primary key auto_increment ,
    name varchar(20),
    age tinyint not null default '0'
    )engine=InnoDB  default charset=utf8 AUTO_INCREMENT=1 comment='用户表';

插入100条随机测试数据

代码语言:javascript
复制
INSERT INTO tb_member (name, age)
SELECT 
    CONCAT('Member', FLOOR(RAND() * 1000)) AS name,
    FLOOR(RAND() * 100) AS age
FROM
    information_schema.tables
LIMIT 100;

这里拆分了2张表

代码语言:javascript
复制
# 表一
DROP table IF EXISTS tb_member1;
create table tb_member1(
    id bigint primary key auto_increment ,
    name varchar(20),
    age tinyint not null default '0'
)ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 
代码语言:javascript
复制
# 表二
DROP table IF EXISTS tb_member2;
create table tb_member2(
    id bigint primary key auto_increment ,
    name varchar(20),
    age tinyint not null default '0'
)ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

接下来开始进行拆分

代码语言:javascript
复制
insert into tb_member1(id,name,age) select id,name,age from tb_member where id%2=0;
insert into tb_member2(id,name,age) select id,name,age from tb_member where id%2=1;

分页查询

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

代码语言:javascript
复制
DROP table IF EXISTS tb_member_all;
create table tb_member_all(
    id bigint primary key auto_increment ,
    name varchar(20),
    age tinyint not null default '0'
    )ENGINE=MERGE UNION=(tb_member1,tb_member2) INSERT_METHOD=LAST CHARSET=utf8 AUTO_INCREMENT=1 ;

我们会发现,你在member1或者member2中创建数据member_all表中也会出现同样的数据。其实tb_member_all表里面是没有存储数据,它就是一个外壳,里面的数据是tb_member1tb_member2的并集,数据的存储是放在分表中;做数据查询的时候,就直接用tb_member_all来做就可以了。

查询数据

代码语言:javascript
复制
SELECT * FROM tb_member_all order by id LIMIT 10 OFFSET 10;

删除数据

代码语言:javascript
复制
delete from tb_member_all where id = 11;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生活处处有BUG 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 分表
  • 分页查询
    • 查询数据
      • 删除数据
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档