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

1. processlist

功能:查看连接数
注意:自己创建连接 一定要关闭连接!!
现在项目都用数据源 这个基本不用自己管(DBCP,c3p0,Druid(https://github.com/alibaba/druid),HiKariCP)
在这里插入图片描述

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

schema 与数据类型优化

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

    windows环境下 mysql的data 目录下
    在这里插入图片描述
    frm后缀是表结构

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

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

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

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

    • 整数类型 (尽可能满足需求最小的数据类型)
      • TYNYINT (8位存储空间)
      • SMALLINT(16位存储空间)
      • MEDIUMINT(24位存储空间)
      • INT(32位存储空间)
      • BIGINT(64位存储空间)
    • 字符 & 字符串类型
      • char

        • 固定长度
        • 最大长度255
        • 会自动删除末尾空格
        • 检索效率、写效率 比varchar高 以空间换时间
        • 应用场景:
          a. 存储长度波动不大的数据 如:md5摘要
          b.存储短字符串 经常更新的字符串
      • varchar 根据实际内容长度保存数据

        • 使用最小符合需求的长度
        • varchar(n) n<255 使用额外一个字节保存长度
                           n>255 使用额外两个字节保存长度
        • varchar(5) 和 varchar(255) 保存同样的内容
          硬盘存储空间是一样的,但是内存空间占用不同,是指定的大小
          在这里插入图片描述
        • varchar在5.6之前 变更长度 或者从255一下变更到255以上之后 就会导致锁表
        • 应用场景:
          a.存储长度波动比较大的数据 比如文章
          b. 字符串很少更新的场景,内次更新后都会重算并使用额外存储空间保存长度
          c.适合保存多字节字符 汉字 特殊字符 等
      • TEXT BLOB
        MySQL 会把每个BLOB 和 TEXT 当做一个对象来独立处理
        两者都是为了存储很大数据而设计的字符串类型
        Text 存储字符串
        Blob 存储二进制

      • datetime

        • 占用8个字节
        • 与时区无关 数据库底层时区配置 对datetime无效
        • 可保存到毫秒
        • 可保存事件范围大
        • 不要使用字符串存储日期 (占用空间大 损失日期类型函数的便捷性)
          在这里插入图片描述
          在这里插入图片描述
      • timestarmp

        • 占用4字节
        • 时间范围1970-01-01 到 2038-01-19
        • 精确到秒
        • 采用整形存储
        • 依赖数据库设置时区
        • 自动更新timestarmp列的值
      • date

        • 占3个字节
        • 使用date类型 还可以利用日期时间函数进行日期之间的计算
        • date类型用于保存 1000-01-01 到 9999-12-21之间的日期
      • 用枚举类型替代字符串

        -- 创建表 
        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 ccc
        select * from enum 
        
        -- 结果是1 2 3 他是整形数据存储的
        select 0+id from enum
        -- 排序 与创建表的时候 定义的顺序有关系 按照定义顺序来的 
        select  id from enum order by id;
        
        
        
        
      • 字段最好指定长度

发布了431 篇原创文章 · 获赞 91 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/qq_36291682/article/details/105522716