avatar

幽林萌逐的blog

幽林萌逐的blog

  • 首页
  • 跑团
  • 数据库
  • java
  • 中间件
  • 生活
  • 神秘学
  • 跑团tool
  • 关于
  • 文章归档
Home mysql 性能优化 schema 和数据类型
文章

mysql 性能优化 schema 和数据类型

Posted 2022-05-26 Updated 2023-02- 26
By 幽林萌逐
4~6 min read

基于schema 和数据类型优化mysql 性能

关于数据类型和值

  • 长度更小的通常更好
  • 类型越简单的越好(比如数字类型的复杂度通常比varchar更快)
  • 尽量不要使用null(虽然会走索引但是会影响sql索引的效率)

字符类型

类型 场景 特点
varchar 如文章/标题,等长度差异大的类型 varchar(5) 和varchar(255) 保存同样的内容存储空间相同,但是内存空间不同,因为内存空间是4k对齐的
char 长度一致的内容 自动去除空格,最大长度为255,检索效率 和 插入效率都比varchar高,但是会存在更多的空间占用,如char(255) 不管有没有写255 都会占用255个字节
text/blob 存储大字符串 一般不怎么用,因为数据库存储这种大字符串效率不高,完全可以写到文件系统中,然后数据库中存储文件系统的地址

时间类型

类型 占用空间 特点
datetime 5字节 可保存到毫秒
timestamp 4字节 精确到秒,但是存在一个问题 时间到2038年就用完了(工作中用的最多)
date 3字节 只能存日期

枚举类型

  • 类似java里的枚举类型
  • 在业务中经常会做一件事,设置 1,2,3,4,5 对应不同的业务类型 如1: 男 2:女 3:未知 4:保密
  • mysql 中查询/插入 枚举类型时 ,底层插入的其实是一个数字,只不过你在查询/插入时,mysql 会做一层转换,这么做的好处1:增加可读性 2:防止插入某些脏数据 比如业务规定1-5,然后意外的插入了一个6
  • 具体代码如下
-- 创建表 设置枚举类型
create table enum_test (
    column_enum enum('男','女','其他') not null default '其他'
);
-- 修改枚举类型
alter table enum_test
    modify column_enum enum ('男', '女', '其他', '啦啦啦') default '其他' not null;
mysql, 数据库
License:  CC BY 4.0
Share

Further Reading

Jul 17, 2022

mysql innoDB 锁

Jul 16, 2022

mysql 自定义变量

mysql 自定义变量mysql中一些自定义变量,可以有一些特殊的玩法帮助完善代码

Jul 15, 2022

mysql 性能优化 limit 优化

哪些情况会导致sql执行变慢mysql 在检索大量数据1. limit了过多的数据 如 limit 1000000 10 解决方案如下-- 在子查询中由于id 为主键可以充分的使用索引性能SELECT * FROM xxx WHERE ID > =(select id from xxx lim

OLDER

mysql 性能监控

NEWER

io 进程 线程 协程

Recently Updated

  • java 之自定义 扁平化 try catch 函数式工具类
  • 塔罗牌 大阿卡纳 隐士
  • 塔罗牌 大阿卡纳 星星
  • 塔罗牌 大阿卡纳 战车
  • 塔罗牌 大阿卡纳 力量

Trending Tags

大阿卡纳 权杖 塔罗牌 神秘学 ro rabbitmq 自动化 注解 剧本杀 ssh

Contents

©2023 幽林萌逐的blog. Some rights reserved.

Using the Halo theme Chirpy