zoukankan      html  css  js  c++  java
  • mysql优化参考(一)-数据结构与概览

    一、无监控不性能

    • show profile(s) [set profiling=1]
    • performance_schema
    • (show) processlist

    二、数据更小的数据

    • varchar
      • 满足需求的最小数据类型(存储数据大小和占用空间大小是不一样的)
      • 空间占用更小
    • char
      • 最大长度 255
      • 查询自动清除尾部的空字符
      • 读写查询性能更好
    • datetime
      • 占用8字节
      • 时区无关(不依赖数据库设置的时区)
      • 毫秒级数据存储,保存范围大
    • timestamp
      • 占用4字节
      • 秒级数据存储,范围:1970-01-01~2038-01-19
      • 采用整型存储
      • 依赖数据库设置的时区
      • 可自动更新timestamp的值,如创建或更新字段时候触发
    • date
      • 3字节
      • 日期函数操作
      • 范围:1000-01-01~9999-12-31
    • 用int替换string,用date替换string
    • 用enum枚举替换string(实际存储的是数值,对于客户端是一样的,优点是:存储的空间占用小,枚举猜测是维护到表信息中)
    • CREATE TABLE `t1` (
        `id` int(11) DEFAULT NULL,
        `type` enum('game','app') DEFAULT NULL
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    • 用整型代替ip的字符串表示(通过函数),【注:如果需要检索就不太合适】
      • select inet_aton('192.168.1.1');
        select inet_ntoa('3232235777');
    • 避免null(优化空间较小)

    三、范式与反范式

    • 3范式的作用:减少冗余
      • 第一范式:表中的列只能含有原子性(不可再分)的值   如地址:包含了省 市 区
      • 第二范式:满足第一范式,没有部分依赖  1对多关系,如果将订单的信息存在订单项中,则会存在一些重复的信息
      • 第三范式:满足第二范式,没有传递依赖  每个列要直接依赖主键,而不是间接
    • 反范式:增加冗余,空间换查询性能

    四、主键

    • 自然主键 如身份证号,订单号等
    • 代理主键 如自增ID  ->更容易维护,但这个看具体业务要求

    五、字符集的选择

    • utf-8(2字节),可以单独对表字段设置utf8mb4(但尝试只对字段设置无法保存emjoy表情,修改了表的字符集之后才能正常存储:参考版本mysql5.7)
    • utf8mb4(emjoy表情)

    六、存储引擎(数据文件的组织形式)

    • innoDB
    • MyIsAM

    参考比较

      MyisAM InnoDB
    支持事务
    支持表锁
    支持行锁
    支持外键
    支持全文索引 5.6+
    适合操作类型 大量select 大量del、update、insert

    七、适当的数据冗余

    • 需要统计才能计算出的数据(数据延迟,旧数据问题)
    • 需要多表join的数据(数据维护问题)

    八、适当拆分

    • 水平拆分:日期、区域等字段或规则进行拆分
    • 垂直拆分:单表拆成多表,一般适用于附加属性的同时查询次数比较少,主属性查询次数频繁的情况
  • 相关阅读:
    pgspider sqlite mysql docker 镜像
    pgspider docker 镜像
    pgspider基于pg 的高性能数据可视化sql 集群引擎
    diesel rust orm 框架试用
    golang 条件编译
    Performance Profiling Zeebe
    bazel 学习一 简单java 项目运行
    一个好用node http keeplive agnet
    gox 简单灵活的golang 跨平台编译工具
    mailhog 作为smtp server mock工具
  • 原文地址:https://www.cnblogs.com/gabin/p/13706621.html
Copyright © 2011-2022 走看看