mysql多条件排序查询
概述数据库中的数据直接呈现出来一般不是我们想要的,所以我们上两节演示了如何对数据进行过滤的方法。除了对数据进行过滤,我们可能还需要对数据进行排序,比如想从列表中了解消费最高的项,就可能需要对金额字段做...
2024.11.23随着项目运行的时间越来越长,有些数据的存储也会越来越大,比如一些点击量,浏览量量,单表的数据可以到达上千万条数据,这时候会存在单表数据过大,查询效率低的问题。
为了提高查询效率这时候需要对单表进行拆分,比如一张1000万条数据的表,我们需要把它拆分为10张表,一张表就需要100万,mysql中单表都有一个最大存储的阈值,数据量不能超过这个值;
分表之间,我们需要去生产一个上万条的数据的表,这里我生产了如下的数据:
我需要对这张表进行拆分多张,我这里拆分了2张表;
第一步:
表一:
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=MyISAMDEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;表二:
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=MyISAMDEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;接下来开始进行拆分:
insert into tb_member1(id,name,sex) select id,name,sex from dd_user where id%2=0;insert into tb_member2(id,name,sex) select id,name,sex from dd_user where id%2=1;数据被分为:
这时候表基本是已经拆分完成。
接下来,我们需要考虑的是一张user表被拆分成2张表,那分页如何实现呢?
第一步:
创建一个主表:
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 ;执行上述出现如下问题:
ERROR 1168 (HY000): Unable to open underlying table which is differently definedor of non-MyISAM type or doesn‘t exist需要检查:
查看上面的分表数据库引擎是不是MyISAM.查看分表与指标的字段定义是否一致。上述的都成功以后,我们会发现,你在member1或者member2中创建数据member_all表中也会出现同样的数据
所以:tb_member_all表就是tb_member1,tb_member2的并集,刚刚实现到这里,我也没理解,后来看了一些文档,了解了一下:
其实tb_member_all表里面是没有存储数据,它就是一个外壳,里面的数据是tb_member1,tb_member2的并集,数据的存储是放在分表中;
这时候,我们就豁然开朗了,利用这个tb_member_all,我们就可以实现数据查询的分页;
java代码实现:
id%2这是取模处理,分配数据进入哪个数据;
我们在做分页的时候就利用tb_member_all表去做分页查询实现
测试结果:
原文链接:blog.csdn.net/joy_tom/article/details/109857573
概述数据库中的数据直接呈现出来一般不是我们想要的,所以我们上两节演示了如何对数据进行过滤的方法。除了对数据进行过滤,我们可能还需要对数据进行排序,比如想从列表中了解消费最高的项,就可能需要对金额字段做...
2024.11.23概述简单分享下最近做的一个mysql数据库分区表改造方案,仅供参考。思路:(假设在2020.7.21进行表分区改造)没时间,就不画图说明了1、创建与原始表一样结构的新表,新分区2、往新表插入旧表在20...
2024.11.20前言:方向:java -Spring MVC - Mybatis - SQL实战目标:Mybatis中调用存储过程,接收存储过程的返回数据;案例必备小知识:Spring MVC , Mybatis ,...
2024.11.20需求:2个以逗号分隔的字符串,如有交集,则返回1,否则返回0。示例: 1.a,b和b,c相比较,有交集b,则返回12.a,b和 b相比较,有交集b,则返回13.a,b和c相比较,没有交集,则返回0结果...
2024.11.20下面演示MySQL Range类型分区的操作,其他类型的分区还有Hash、Key、List等等。分区优点:1. 分区可以分在多个磁盘,存储更大一点。2. 根据查找条件,也就是where后面的条件,查找...
2024.11.20