MySQL的故事——Schema与数据类型优化

Schema与数据类型优化


一、选择优化的数据类型

更小的通常更好
应该尽量使用可以正确存储数据的最小类型,更小的数据类型通常更快,因为他们占用更少的磁盘,内存和CPU缓存,并且处理时需要的CPU周期更少
简单就好
更简单的数据类型的操作通常需要更少的CPU周期。例如 ,整型数字比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较相对整型数字比较更复杂。比如,应使用INTERGER存储IP地址
尽量避免NULL
通常情况下,最好指定列为NOT NULL。如果查询中包含可为NULL的列,对MySQL来说更难优化,因为可为NULL的列使得索引、索引统计和值比较非常复杂,可为NULL的列会使用更多的存储空间,当可为NULL的列被索引时,每个索引记录需要一个额外的字节。但是可为NULL的列改成NOT NULL带来的性能提升比较小,但如果计划在列上创建索引,就应该避免设计成可为NULL的列。

4.1.1 整数类型

整数类型 占用空间 范围
TINYINT 8 [-27,27-1]
SMALLINT 16 [-215,215-1]
MEDIUMINT 24 [-223,223-1]
INT 32 [-231,231-1]
BIGINT 64 [-263,263-1]

INT(11)只是指定显示字符的范围。不会限制值的范围

4.1.2 实数类型
实数是带有小数部分的数字,可以使用DECIMAL存储比BIGINT还大的整数。
DECIMAL类型用于存储精确的小数,支持精确计算。

4.1.3 字符串类型
varchar类型用于存储可变长字符串,比定长更节省空间。
char定长字符串,MySQL在存储时会去除char尾部的空格。
blob采用二进制的方式存储,没有排序规则和字符集。包含tinyblob,blob,mediumblob,longblob
text采用字符串的方式存储,有排序规则和字符集,包含 tinytext,text,mediumtext,longtext

4.1.4 日期和时间类型
DATETIME和TIMESTAMP
现在推荐使用DATETIME,范围更大,与时区无关,占8个字节
datetime:大范围的值 1001-9999年 YYYYMMDDhhmmss 与时区无关 8字节
timestamp: 1970-2038年 存的是1970.1.1以来的秒数 和时区相关 4字节

二、MySQL模式设计的陷阱

太多的列
太多的关联
NULL值

三、范式和反范式

在范式化的数据库中,每个事实数据只会出现一次
反范式化的数据库中,信息是冗余的,可能会存储在多个地方

范式优点:
范式化的更新操作更快,只需要更改较少的数据。
范式化的表更小,可以更好的放在内存里,执行操作会更快。
没有多余的数据,可以减少distinct或GROUP BY的操作
范式缺点:
通常需要表关联,,关联代价昂贵,也可能使一些索引策略无效。
反范式优点:
所有的数据都在一张表中,可以避免关联。
不关联的时候即使全表扫描,也是顺序IO。
反范式缺点:
冗余的多余数据,更新更慢。
表大,放到内存中,占用大,容易挤出热数据

四、缓存表和汇总表

缓存表:存储比较简单可以从schema其它表获取(但是获取速度比较慢)数据的表(例如,逻辑上冗余的数据)
汇总表:保存的是使用GROUP BY聚合数据的表(例如,数据不是逻辑上冗余的)

五、加快Alter table速度

Alter table操作对特大表来说,是个大问题。
可以只修改frm(表结构)文件来加快速度


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/71224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

干涉阵相关知识

文章目录 Dirty ImageDirty BeamClean ImagePoint Spread Function(PSF)Station Beam关系Dirty Image 脏图像(Dirty Image): 脏图像是在射电干涉测量中观测到的图像,它是真实图像和仪器效应(包括PSF和站波束)的组合结果。 在射电干涉测量中,观测到的结果被称为“脏图像…

KamaCoder(四)

题目来源于:卡码网KamaCoder 题解来源于:GitHub - youngyangyang04/kamacoder-solutions: 卡码网题解全集 目录 路径简化 题目描述 输入 输出 样例输入 样例输出 汽水瓶子换饮料 题目描述 输入 输出 样例输入 样例输出 开发商购买土地 …

3、DVWA——CSRF

文章目录 一、CSRF概述二、low2.1 通关思路2.2 源码分析 三、medium3.1 通关思路3.2 源码分析 四、high4.1 通关思路4.2 源码分析 五、impossible 一、CSRF概述 CSRF全称为跨站请求伪造(Cross-site request forgery),是一种网络攻击方式&…

Excel_VBA程序文件的加密及解密说明

VBA应用技巧及疑难解答 Excel_VBA程序文件的加密及解密 在您看到这个文档的时候,请和我一起念:“唵嘛呢叭咪吽”“唵嘛呢叭咪吽”“唵嘛呢叭咪吽”,为自己所得而感恩,为付出者赞叹功德。 本不想分享之一技术,但众多学…

Kafka核心原理第二弹——更新中

架构原理 一、高吞吐机制:Batch打包、缓冲区、acks 1. Kafka Producer怎么把消息发送给Broker集群的? 需要指定把消息发送到哪个topic去 首先需要选择一个topic的分区,默认是轮询来负载均衡,但是如果指定了一个分区key&#x…

基于SSM的校园驿站管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Git管理

Git管理 ①对于项目目录中有.git的,可以在idea里面更改远程提交地址 Git->>Manage Remotes 中修改远程提交地址 ②对于没有.git目录的项目 在项目的根目录下进入cmd,使用下面的语句初始化.git目录 ##初始化 git init

本地电脑搭建web服务器、个人博客网站并发布公网访问 【无公网IP】(1)

文章目录 前言1. 安装套件软件2. 创建网页运行环境 指定网页输出的端口号3. 让WordPress在所需环境中安装并运行 生成网页4. “装修”个人网站5. 将位于本地电脑上的网页发布到公共互联网上 前言 在现代社会,网络已经成为我们生活离不开的必需品,而纷繁…

《异常检测——从经典算法到深度学习》22 Kontrast: 通过自监督对比学习识别软件变更中的错误

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

OpenAI发布ChatGPT企业级版本

本周一(2023年8月28日)OpenAI 推出了 ChatGPT Enterprise,这是它在 4 月份推出的以业务为中心的订阅服务。该公司表示,根据新计划,不会使用任何业务数据或对话来训练其人工智能模型。 “我们的模型不会从你的使用情况中…

Run the Docker daemon as a non-root user (Rootless mode)

rootless 简介 rootless模式是指以非root用户身份运行Docker守护程序和容器。那么为什么要有rootless mode呢?因为在root用户下安装启动的容器存在安全问题。存在的安全问题具体来说是容器内的root用户就是宿主机的root用户,容器内uid1000的用户就是宿主…

Linux监测进程打开文件

分析问题过程中,追踪进程打开的文件可以在许多不同情况下有用,体现在以下几个方面: 故障排除和调试: 当程序出现问题、崩溃或异常行为时,追踪进程打开的文件可以帮助找出问题的根本原因。这有助于快速定位错误&#x…

2023国赛C题解题思路:蔬菜类商品的自动定价与补货决策

本次将全程提供国赛C题完整解题思路及代码,同时共享一些国赛论文模板等资料,需要的小伙伴可以关注一下,持续更新!大家也可以关注B站视频:不知名数学家小P 实时更新 本次C题是一道较为简单的统计分析题目,建…

RGMII 与 GMII 转换电路设计

文章目录 前言一、RGMII 接口的信号说明二、RGMII 发送的 FPGA 实现方案1. OPPOSITE_EDGE 模式2. SAME_EDGE 模式三、使用 FPGA 实现 RGMII 接口前言 RGMII 是 IEEE802.3z 标准中定义的千兆媒体独立接口(Gigabit Medium Independent Interface)GMII 的一个替代品。相较于 GM…

水果库存系统(SSM+Thymeleaf版)

不为失败找理由,只为成功找方法。所有的不甘,因为还心存梦想,所以在你放弃之前,好好拼一把,只怕心老,不怕路长。 文章目录 一、前言二、系统架构与需求分析1、技术栈1.1 后端1.2 前端 2、需求分析 三、设计…

jwt和token的区别

目录 jwt和token的区别两者区别格式安全性扩展性无状态性 使用场景Token的使用场景:JWT的使用场景: jwt和token的区别 两者区别 Token和JWT(JSON Web Token)是两种常见的身份验证机制,它们有以下区别: 格…

Tomcat加载静态资源--防止SpringMVC拦截

最简洁方式:使用API 在配置文件下写配置类SpringMvcSupport,并且让SpringMVC扫描到此文件夹ComponentScan({"com.itheima.controller","com.itheima.config"}) SpringMvcSupport配置类如下 Configuration public class SpringMvcS…

LeetCode每日一题:1123. 最深叶节点的最近公共祖先(2023.9.6 C++)

目录 1123. 最深叶节点的最近公共祖先 题目描述: 实现代码与解析: dfs 原理思路: 1123. 最深叶节点的最近公共祖先 题目描述: 给你一个有根节点 root 的二叉树,返回它 最深的叶节点的最近公共祖先 。 回想一下&…

【深度学习】You Only Segment Once: Towards Real-Time Panoptic Segmentation,YOSO全景分割

论文:https://arxiv.org/abs/2303.14651 代码:https://github.com/hujiecpp/YOSO 文章目录 Abstract1. Introduction2. Related Work3. Method3.1. Task Formulation3.2. Feature Pyramid Aggregator3.3. Separable Dynamic Decoder 4. Experiments4.1. …

go 地址 生成唯一索引v2 --chatGPT

问:golang 函数 getIndex(n,addr,Hlen,Tlen) 返回index。参数n为index的上限,addr为包含大小写字母数字的字符串,Hlen为截取addr头部的长度,Tlen为截取addr尾部的长度 gpt: 你可以编写一个函数来计算根据给定的参数 n、addr、Hlen 和 Tlen …