• 表的优化与列类型选择


    1. 表的优化

    1.1. 定长与变长分离

    id int, 4个字节, char(4) 4个字符长度,也是定长, time

    即每一单元值占的字节是固定的.

    核心且常用字段,宜建成定长,放在一张表.

    varchar, text,blob,这种变长字段,适合单放一张表, 用主键与核心表关联起来.

    1.2. 常用字段和不常用字段要分离.

    需要结合网站具体的业务来分析,分析字段的查询场景,查询频度低的字段,单拆出来.

    1.3. 合理添加冗余字段.

    典型的”空间换时间”

    2.列选择原则

    2.1. 字段类型优先级 整型 > date,time > enum,char>varchar > blob

    列的特点分析:

    整型: 定长,没有国家/地区之分,没有字符集的差异

    time定长,运算快,节省空间. 考虑时区,sql时不方便 where > ‘2005-10-12’;

    enum: 能起来约束值的目的, 内部用整型来存储,但与char联查时,内部要经历串与值的转化

    Char 定长, 考虑字符集和(排序)校对集

    varchar, 不定长 要考虑字符集的转换与排序时的校对集,速度慢.

    text/Blob 无法使用内存临时表

    2.2. 够用就行,不要慷慨 (smallint,varchar(N))

    原因: 大的字段浪费内存,影响速度,

    以年龄为例 tinyint unsigned not null ,可以存储255,足够. int浪费了3个字节

    varchar(10) ,varchar(300)存储的内容相同, 但在表联查时,varchar(300)要花更多内存

    2.3. 尽量避免用NULL()

    原因: NULL不利于索引,要用特殊的字节来标注.

    在磁盘上占据的空间其实更大.

    2.4. Enum列的说明

    1: enum列在内部是用整型来储存的

    2: enum列与enum列相关联速度最快

    3: enum列比(var)char 的弱势---在碰到与char关联时,要转化. 要花时间.

    优势在于,char非常长时,enum依然是整型固定长度.

    当查询的数据量越大时,enum的优势越明显.

     

    enumchar/varchar关联 ,因为要转化,速度要比enum->enum,char->char要慢,

    但有时也这样用-----就是在数据量特别大时,可以节省IO.

    原因----无论enum(‘manmaman’,’womanwomanwoman’) 枚举的字符多长,内部都是用整型表示, 在内存中产生的数据大小不变,char,却在内存中产生的数据越来越多.

    总结: enum enum类型关联速度比较快,Enum 类型节省了IO

  • 相关阅读:
    SpringBoot异步处理请求
    5本最佳的 Java 面向对象理论和设计模式的书籍
    彻底弄懂 HTTP 缓存机制 —— 基于缓存策略三要素分解法
    Java 性能优化的五大技巧
    Java 8 最佳技巧
    Java 并发的四种风味:Thread、Executor、ForkJoin 和 Actor
    在 Java 8 中避免 Null 检查
    关于创建java线程池问题的思考
    LuoguP1858 多人背包(DP)
    Luogu[YNOI2019]排序(DP,线段树)
  • 原文地址:https://www.cnblogs.com/aaron911/p/8370604.html
Copyright © 2020-2023  润新知