MySQL大表设计
存储大规模数据集需要仔细设计数据库模式和索引,以便能够高效地支持各种查询操作。在面对数亿条数据,每条数据包含数百个字段的情况下,以下是我能想到的在设计数据库的时候需要注意的内容,不足之处欢迎各位在评论区批评指正:
1. 数据库设计
表结构设计
垂直分割:将大的表分割成多个相关性较小的表,以减少单个表的字段数量。这有助于提高查询效率和降低冗余。
规范化:合理使用规范化,将重复数据抽取成独立的表,以减小数据冗余。
-- 例子:主表
CREATE TABLE main_data (
id INT PRIMARY KEY,
field_1 VARCHAR(255),
field_2 INT,
-- 其他字段
);
-- 例子:关联表
CREATE TABLE additional_data (
id INT PRIMARY KEY,
main_data_id INT,
field_201 VARCHAR(255),
-- 其他字段
FOREIGN KEY (main_data_id) REFERENCES main_data(id)
);
数据类型选择
根据字段的性质选择适当的数据类型,以减小存储空间和提高查询效率。
2. 索引设计
主键索引:对主键字段创建索引,以提高检索速度。
CREATE INDEX idx_main_data_id ON main_data(id);
唯一索引:对经常被查询的唯一性字段创建索引,例如,用户名或邮箱。
CREATE UNIQUE INDEX idx_unique_field ON main_data(field_1);
组合索引:根据查询需求创建组合索引,以提高联合查询的效率。
CREATE INDEX idx_combination ON main_data(field_1, field_2);
全文索引:对需要进行全文搜索的字段创建全文索引,例如,文本内容。
CREATE FULLTEXT INDEX idx_fulltext ON main_data(text_field);
3. 分库分表
如果数据量仍然巨大,可以考虑分库分表策略,将数据划分到不同的数据库或表中。
4. 数据分区
根据时间、范围等条件对数据进行分区,以提高查询效率。
5. 垂直分割
对于一些很少使用的字段,可以考虑将其垂直分割到其他表中,只在需要时进行关联查询。
6. 数据库参数调优
调整数据库的参数,如缓冲池大小、连接池大小等,以适应大规模数据的存储和查询需求。
-- 例子:设置缓冲池大小
SET GLOBAL innodb_buffer_pool_size = 2G;
设计大规模数据集的数据库是一个综合性的任务,需要考虑到数据结构、索引、查询需求以及数据库引擎的特性。在设计时,充分了解数据的访问模式,根据查询的特点合理设计索引,通过适当的规范化和分区来优化存储结构,最终达到高效的查询和存储效果。
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特
MySQL大表设计的更多相关文章
- mysql大表设计以及优化
MYSQL千万级数据量的优化方法积累https://m.toutiao.com/group/6583260372269007374/?iid=6583260372269007374 MySQL 千万级 ...
- 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结
本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言 MySQL作为开源技术的代表作之一,是 ...
- MySql数据表设计,索引优化,SQL优化,其他数据库
MySql数据表设计,索引优化,SQL优化,其他数据库 1.数据表设计 1.1数据类型 1.2避免空值 1.3text类型优化 2.索引优化 2.1索引分类 2.2索引优化 3.SQL优化 3.1分批 ...
- 走向DBA[MSSQL篇] 针对大表 设计高效的存储过程【原理篇】 附最差性能sql语句进化过程客串
原文:走向DBA[MSSQL篇] 针对大表 设计高效的存储过程[原理篇] 附最差性能sql语句进化过程客串 测试的结果在此处 本篇详解一下原理 设计背景 由于历史原因,线上库环境数据量及其庞大,很多千 ...
- [记录]一则清理MySQL大表以释放磁盘空间的案例
一则清理MySQL大表以释放磁盘空间的案例 一.基本情况: 1.dbtest库554G,先清理st_online_time_away_ds(37G)表的数据,保留半年的数据: 1)删除的数据:sele ...
- MySQL 大表优化方案(长文)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- 从云数据迁移服务看MySQL大表抽取模式
摘要:MySQL JDBC抽取到底应该采用什么样的方式,且听小编给你娓娓道来. 小编最近在云上的一个迁移项目中被MySQL抽取模式折磨的很惨.一开始爆内存被客户怼,再后来迁移效率低下再被怼.MySQL ...
- Mysql大表查询优化技巧总结及案例分析
http://www.169it.com/article/3219955334.html sql语句使用基本原则:1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 orde ...
- MySQL大表优化方案 Mysql的row_format(fixed与dynamic)
转自:https://mp.weixin.qq.com/s/VY69wWlrVLjRtKU7ULrYGw 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除 ...
- 使用solr的DIHandler 构建mysql大表全量索引,内存溢出问题的解决方法
solr官方给出的解决方式是: DataImportHandler is designed to stream row one-by-one. It passes a fetch size value ...
随机推荐
- 文心一言 VS 讯飞星火 VS chatgpt (72)-- 算法导论7.1 3题
三.请简要地证明:在规模为 n 的子数组上,PARTITION 的时间复杂度为 Θ(n). 文心一言: 首先,我们需要明确PARTITION函数的具体定义.PARTITION函数通常用于快速排序算法中 ...
- [ansible]wget批量调用shell脚本
前言 相较于使用playbook,个人更习惯于编写shell脚本.如果需要多台服务器执行某一任务,可以将脚本放在某个http服务目录下,比如nginx,然后通过ansible的shell模块让服务器通 ...
- JS逆向实战21——某查查webpack密码加密
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 网站 aHR0cHM6Ly ...
- 12、Spring之基于xml的AOP
阅读本文前,建议先阅读Spring之基于注解的AOP 12.1.环境搭建 创建名为spring_aop_xml的新module,过程参考9.1节 12.1.1.配置打包方式和依赖 <?xml v ...
- CTC蜀道会:第一次圆桌会圆满结束
近期,成都.NET俱乐部核心成员经过讨论会,我们成立了CTC蜀道会,它是一个专注于创业历程.研发管理.AIGC.副业之路..NET.Vue.微软技术.开源技术等领域的社区,立足于蓉城成都,致力于连接同 ...
- 手写RISC-V处理器(1)
由来 由于去年工作变动,有幸进入了芯片行业,但主要工作内容为基于RISC-V的嵌入式应用软件开发,几乎接触不到芯片设计的相关知识,然而随着工作的深入,越来越想探究一下运行在软件之下的CPU的世界,于是 ...
- Ipa打包并安装到iphone
手动运行篇: 在真机上运行appium会进行闪退,因为我们的真机是不合法的真机,怎么样才能合法呢,要注册我们的设备才行 要对app进行打包,要先进行签名,要签名,就需要证书,证书可以自己伪造,但是这一 ...
- HTML一键打包IPA(苹果IOS应用)工具 网站打包 APP
工具简介 HTML一键打包IPA(苹果应用)工具可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码,支持在苹果设备上安装运行. 该软件已经被GDB苹果网页一键打包工具取代,详 ...
- 6.2 Sunday搜索内存特征
Sunday 算法是一种字符串搜索算法,由Daniel M.Sunday于1990年开发,该算法用于在较长的字符串中查找子字符串的位置.算法通过将要搜索的模式的字符与要搜索的字符串的字符进行比较,从模 ...
- ingress获取客户端真实IP
环境: k8s1.25.2.helm部署的ingress 1.进入ingress helm目录,修改values.yaml文件 2.卸载重装 helm uninstall ingress-test - ...