首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

20亿条记录MySQL迁移实战

我们的一个客户遇到了一个 MySQL 问题,他们有一张大,这张20 多亿条记录,而且还在不断增加。如果不更换基础设施,就有磁盘空间被耗尽的风险,最终可能会破坏整个应用程序。...而且,这么大的还存在其他问题:糟糕的查询性能、糟糕的模式设计,因为记录太多而找不到简单的方法来进行数据分析。...因此,我们用新 schema 创建了新,并使用来自 Kafka 的数据来填充新的分区。在迁移了所有记录之后,我们部署了新版本的应用程序,它向新进行插入,并删除了旧表,以便回收空间。...我开发了一个新的 Kafka 消费者,它将过滤掉不需要的记录,并将需要留下的记录插入另一张。我们把它叫作整理,如下所示。...由于我们只对特定的分析查询使用 BigQuery,而来自用户其他应用程序的相关查询仍然由 MySQL 服务器处理,所以开销并不会很高。

4.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL查询

是一种数据库分割技术,用于将大拆分成多个小,以提高数据库的性能和可管理性。在MySQL中,可以使用多种方法进行分,例如基于范围、哈希或列表等。...下面将详细介绍MySQL如何分以及分后如何进行数据查询。 基于哈希的分 基于哈希的分是一种将数据分散多个子表中的数据库分策略。这种方法通过计算数据的哈希值来决定数据应该存储在哪个子表中。...示例插入数据: -- 计算数据的哈希值(示例使用MySQL的MD5哈希函数) SET @hash = MD5(CONCAT(customer_id, order_date)); -- 根据哈希值决定插入哪个子表中...SET @table_number = ABS(CAST(CONV(SUBSTRING(@hash, 1, 6), 16, 10) AS SIGNED)) % 10; -- 10是子表数量 -- 插入数据对应的子表...= ABS(CAST(CONV(SUBSTRING(@hash, 1, 6), 16, 10) AS SIGNED)) % 10; -- 10是子表数量 -- 查询对应的子表 SELECT * FROM

61920

MySQL之单查询、多表查询

一、单查询: 单个查询方法及语法顺序需要通过实际例子来熟悉 先将数据创建下: ? ?...) # 查询记录,其中匹配名字条件为以j开头,n或者y结尾的名字 mysql> select * from emp where name regexp '^j....多个之间的查询一般都是在 之间存在某种逻辑关联的情况下进行的查询,这种逻辑上的关联其实就是中某个字段名和另外一个中的字段名存在一个一一对应的关系或者关联。...# 将2张关联一起的操作,有专门的方法 # 1、内连接(inner join):只取两张有对应关系的记录 mysql> select * from emp inner join dep on emp.dep_id...| +------+ | 200 | | 201 | +------+ mysql> # 在将上述查询的id号作为条件,进行再一次查询mysql> select * from emp

22K30

mysql+分页查询

背景 我们都知道,数据量大了,都要对数据库进行分库分。奈何一直对分及分查询没什么概念,这里先不讲那么多概念,先直接演示一个demo。我们直接上车,请坐稳扶好。...key auto_increment , name varchar(20), age tinyint not null default '0' )engine=InnoDB...where id%2=0; insert into tb_member2(id,name,age) select id,name,age from tb_member where id%2=1; 分页查询...其实tb_member_all表里面是没有存储数据,它就是一个外壳,里面的数据是tb_member1,tb_member2的并集,数据的存储是放在分中;做数据查询的时候,就直接用tb_member_all...查询数据 SELECT * FROM tb_member_all order by id LIMIT 10 OFFSET 10; 删除数据 delete from tb_member_all where

36430

MYSQL的基本查询

查询的列越多,意味着需要传输的数据量越大; -- 2. 可能会影响索引的使用。...案例: //将一张中去重的数据插入另一张空 //思路 //先创建一张空,然后筛选数据并去重,插入中 //创建两张 mysql> create table data(    ...数量 SUM([DISTINCT] expr) 返回查询的数据的 总和,不是数字没有意义 AVG([DISTINCT] expr) 返回查询的数据的 平均值,不是数字没有意义 MAX([DISTINCT...] expr) 返回查询的数据的 最大值,不是数字没有意义 MIN([DISTINCT] expr) 返回查询的数据的 最小值,不是数字没有意义 1.count函数 案例: mysql> select...)    | +--------+-------------+ |     10 | 2916.666667 | |     20 | 2175.000000 | |     30 | 1566.666667

15810

mysql-单查询

语法: 一、单查询的语法    SELECT 字段1,字段2... ...from 2.拿着where指定的约束条件,去文件/中取出一条条记录 3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组 4.将分组的结果进行having过滤...= 2.between 80 and 100 :值在80100之间 3.in(80,90,100)值是1020或30 4.like 'xiaomagepattern': pattern可以是%或者_...#1、首先明确一点:分组发生在where之后,即分组是基于where之后得到的记录而进行的 #2、分组指的是:将所有记录按照某个相同字段进行归类,比如针对员工信息的职位分组,或者按照性别进行分组等...,没有任何意义,因为我们现在想查出当前组的多条记录 mysql> select * from employee group by post;  # 查询不全 +----+----------+-----

4.3K20

MySQL查询,联结

一,子查询查询:嵌套在其他查询中;执行顺序由里到外。子查询数目没有限制,如果要使用多层查询,注意写好缩进格式,不要出错。...二,联结 SQL强大的功能之一就是能够在数据检索查询的执行中使用联结(join)。使用联结的的原理是一个与另一个有相关联的列。一个的外键是另一个列主键,通过外键可以将两个联结起来。...在使用联结时,实际上做的是将第一个的每一行与第二行行进行匹配。因此,如果没有联结条件,检索出的行数目将是第一个的行数乘以第二个的行数,即所谓的笛卡儿积。...对于联结的数目没有限制,对于那些复杂的查询使用联结将变得简单。...外部链接,左联结(left outer join),右联结(right outer join);左联结左边全部返回,右边没有匹配的为空;右联结同理。

4.5K20

MySQL的基本查询

(20) -> ); (1)单行数据 + 全列插入 接下来我们插入两条记录,其中 value_list 数量必须和定义的列的数量及顺序一致: 例如插入一个数据: insert into...全列查询 语法:SELECT * FROM 名; 通常情况下不建议使用 * 进行全列查询,因为: 查询的列越多,意味着需要传输的数据量越大; 可能会影响索引的使用。...查询字段为表达式 表达式不包含字段:select id, name, 10 from exam_result; - - - 显示 10 表达式包含一个字段:select id, name, chinese...实例:创建一个新,插入一个旧表中查询的去重后的数据 先创建一个旧表,并插入数据: mysql> create table duplicate_table (id int, name varchar...(20)); mysql> INSERT INTO duplicate_table VALUES -> (100, 'aaa'), -> (100,

6910

mysql查找最后一条记录_mysql查询记录总数

select oid,status,max(time) time from 名 group by oid,max(time); SELECT * from tb where id = (SELECT...max(id) FROM tb); mysql 分组取最新的一条记录(整条记录) mysql取分组后最新的一条记录,下面两种方法.一种是先筛选 出最大和最新的时间,在连查询.一种是先排序,然后在次分组查询...查询第几行第几行记录 查询最后一行和第一行记录 查询前几行和后几行记录 1、查询第一行记录: select * from table limit 1 2、查询第n行第m行记录 select *...from table1 limit n-1,m-n; SELECT * FROM table LIMIT 5,10;返回第6行第15行的记录 select * from employee limit...3,1; // 返回第4行 3、查询前n行记录 select * from table1 limit 0,n; 或 select * from table1 limit n; 4、查询后n行记录 select

6.5K20

MySQL的单多表查询

id,name from staff where id <= 10; #2.between 10 and 20 :值在1020之间 #例子: #1.查看工资在1万2万之间的员工 mysql> select...,salary from staff where salary not between 10000 and 20000; #3.in(10,20,30) :值是1020或30 #例子: #1.查看工资是...name like 'wu%'; 1.2.group by分组查询 #分组:指的是将所有记录按照某个相同字段进行归类,比如针对员工信息的职位分组,或性别分组等 #注意1:分组是发生在where之后,...查询岗位名以及各岗位的最低薪资 mysql> select post,min(salary) from staff group by post; 1.3.having过滤 #注意点: 1.执行优先级从高低...from staff order by age asc,id desc; 1.5.limit限制查询记录条数 #例子: #1.查看id列按升序排序前3列,默认从0开始,查询出第一条 mysql>

14.5K40
领券