mysql优化 个人笔记 非礼勿扰 -m02

1. processlist

功能:查看连接数
注意:自己创建连接 一定要关闭连接!!
现在项目都用数据源 这个基本不用自己管(DBCP,c3p0,Druid(https://github.com/alibaba/druid),HiKariCP)
mysql优化 个人笔记 非礼勿扰 -m02

字段说明
  • List item
  • id : sessionId
  • user:操作用户
  • host:操作主机 端口
  • db: 操作的数据库
  • command: 表示命令类型
  • info:表示详细的sql语句
  • time:表示相应命令执行时间
  • state:表示命令执行状态

schema 与数据类型优化

1. 数据类型的优化
  1. 更小的通常更好
    他们占用更少的磁盘、内存、cpu缓存
    并且处理时cpu周期更少
    但是需要注意 不要低估数据存储值的范围(字段过小会截断错误)
    可以设置不同的类型 插入数据测试(数据存储大小直接看数据文件 )

    windows环境下 mysql的data 目录下
    mysql优化 个人笔记 非礼勿扰 -m02
    frm后缀是表结构

    idb后缀是数据文件 idb 引擎就是 innoDB
    如果不是idb 是MYD MYI 引擎就是MyISAM
    MYD 是数据文件 MYI是索引文件

  2. 简单就好
    简单数据类型的操作,通常更少的数据周期

  • 整型比字符串操作代价更低 因为字符集和校对规则 字符串比整型更复杂
  • 使用mysql自建类型 而不是字符串 存储日期和时间
  • 用整型存储IP INET_ATON(‘192.168.2.1’) – > 数字
  • INET_NTOA(数字) --> IP地址

尽量避免使用NULL

  • 如果查询中包含null的列,对mysql来说很难优化
  • 因为null使得索引、索引统计、和值的比较更加复杂
  • null 改为not null 性能提升比较小 所以没必要都改 只是在设计的时候注意 尽可能不为null

实际细则

  • char

  • varchar 根据实际内容长度保存数据

  • TEXT BLOB
    MySQL 会把每个BLOB 和 TEXT 当做一个对象来独立处理
    两者都是为了存储很大数据而设计的字符串类型
    Text 存储字符串
    Blob 存储二进制

  • datetime

  • timestarmp

  • date

  • 用枚举类型替代字符串

    -- 创建表 create table enum(
    	id  enum('aaa','bbb','ccc') not null )-- 插入数据insert into enum(id)values ('aaa')insert into enum(id)values ('bbb'),('ccc')-- 查询  结果虽然是aaa bbb cccselect * from enum -- 结果是1 2 3 他是整形数据存储的select 0+id from enum-- 排序 与创建表的时候 定义的顺序有关系 按照定义顺序来的 select  id from enum order by id;
  • 字段最好指定长度

  • 固定长度
  • 最大长度255
  • 会自动删除末尾空格
  • 检索效率、写效率 比varchar高 以空间换时间
  • 应用场景:
    a. 存储长度波动不大的数据 如:md5摘要
    b.存储短字符串 经常更新的字符串
  • 使用最小符合需求的长度
  • varchar(n) n<255 使用额外一个字节保存长度
                     n>255 使用额外两个字节保存长度
  • varchar(5) 和 varchar(255) 保存同样的内容
    硬盘存储空间是一样的,但是内存空间占用不同,是指定的大小
    mysql优化 个人笔记 非礼勿扰 -m02
  • varchar在5.6之前 变更长度 或者从255一下变更到255以上之后 就会导致锁表
  • 应用场景:
    a.存储长度波动比较大的数据 比如文章
    b. 字符串很少更新的场景,内次更新后都会重算并使用额外存储空间保存长度
    c.适合保存多字节字符 汉字 特殊字符 等
  • 占用8个字节
  • 与时区无关 数据库底层时区配置 对datetime无效
  • 可保存到毫秒
  • 可保存事件范围大
  • 不要使用字符串存储日期 (占用空间大 损失日期类型函数的便捷性)
    mysql优化 个人笔记 非礼勿扰 -m02
    mysql优化 个人笔记 非礼勿扰 -m02
  • 占用4字节
  • 时间范围1970-01-01 到 2038-01-19
  • 精确到秒
  • 采用整形存储
  • 依赖数据库设置时区
  • 自动更新timestarmp列的值
  • 占3个字节
  • 使用date类型 还可以利用日期时间函数进行日期之间的计算
  • date类型用于保存 1000-01-01 到 9999-12-21之间的日期
  • TYNYINT (8位存储空间)
  • SMALLINT(16位存储空间)
  • MEDIUMINT(24位存储空间)
  • INT(32位存储空间)
  • BIGINT(64位存储空间)
  • 整数类型 (尽可能满足需求最小的数据类型)
  • 字符 & 字符串类型
上一篇:Enum Description多语言的显示(上)


下一篇:浅析TypeScript中const和readonly的区别、枚举和常量枚举的区别以及关于typescript中枚举的相关知识