zoukankan      html  css  js  c++  java
  • 8.Mysql数据类型选择

    8.选择合适的数据类型
    8.1 CHAR与VARCHAR
    CHAR固定长度的字符类型,char(n) 当输入长度不足n时将用空格补齐,char(n)占用n个字节,CHAR类型输出时会截断尾部的空格,即使是数据值尾部的空格也将会被截断。CHAR处理速度要快于VARCHAR。
    VARCHAR可变长度的字符类型,varchar(n) 当输入长度不足n时不用补齐,varchar(n)占用实际长度+1个字节,+1个字节是因为VARCHAR值后需要加一个字符串结尾符。VARCHAR类型输出时会截断字符串结尾符。
    不同存储引擎下CHAR与VARCHAR的选择:
    MyISAM存储引擎建议使用CHAR;
    MEMORY存储引擎使用固定长度的数据行存储,即使列定义为VARCHAR也会被作为CHAR处理;
    InnoDB存储引擎建议使用VARCHAR,所有行都有头部指针。
    8.2 TEXT和BLOB
    TEXT和BLOB用于保存大文本,其中:TEXT类型用来保存字符数据,BLOB类型用来保存二进制数据。
    TEXT和BLOB的性能考虑:
    1.optimize table
    在删除数据后或者将数据由大改小后,数据将被删除,但空间并不会释放,这些在表的数据文件内未释放的空间称为碎片,碎片对表的性能会产生影响。
    optimize table命令可以整理磁盘空间,并释放碎片。
    例子:
    create table test10 (id varchar(100),content text);
    insert into test10 values ('1',repeat('abc',100)); -- repeat()函数是循环
    insert into test10 values ('2',repeat('bcd',100));
    insert into test10 values ('3',repeat('cde',100));
    -- 查看数据文件 C:Program FilesMySQLDataDatascott est10.ibd 96k
    delete from test10 where id=1;
    -- 查看数据文件
    optimize table test10; -- 'Table does not support optimize, doing recreate + analyze instead'
    -- 查看数据文件
    2.合成索引
    使用合成索引来提高大文本字段的查询性能。
    合成索引是指根据大文本字段的内容建立一个散列值,并单独存储散列值,以散列值来查询数据行。
    注意:只能用于散列值的精确匹配,不能用于范围匹配。
    可以生成散列值的函数包括md5(),sha1(),crc32()等。
    例子:
    create table test11(id varchar(100),context blob,hash_value varchar(40));
    insert into test11 values (1,repeat('beijing',100),md5(context));
    insert into test11 values (2,repeat('shanghai',100),md5(context));
    insert into test11 values (3,repeat('guangzhou',100),md5(context));
    select * from test11;
    explain select * from test11 where hash_value=md5(repeat('guangzhou',100));
    3.前缀索引
    -- 对context列前100个字符建立索引
    create index idx_blob on test11(context(100));
    -- 查看执行计划,前缀索引被查询使用
    explain select * from test11 where context like 'guangzhou%';
    4.避免select *
    如果不需要返回TEXT和BLOB列时,则避免使用select *,以减少网络传输的数据量。
    5.将TEXT和BLOB列拆表
    把TEXT和BLOB列分离到单独的表中,适用于对其他列使用频繁,对TEXT和BLOB列使用不频繁的情况下。

    8.3 浮点数和定点数
    浮点数用于存储含小数的数值,包括float和double,浮点数精度较低(float 6位,double 15位),超出有效位数将导致四舍五入。
    定点数以字符串存储,数据类型为decimal(65,0~30),超出定义精度时,在SQLMode模式下会警告并四舍五入,在TRADITIONAL模式下报错无法插入。
    精度要求较高时建议选择定点数decimal(65,0~30)。

    8.4 日期类型选择
    根据实际需要选择能够满足应用的最小存储的日期类型;
    只存年,用year;
    只存年月日,用date;
    只存时分秒,用time;
    存年月日时分秒,用datetime,
    跨不同时区使用,用timestamp。

    8.5 小结

  • 相关阅读:
    ant
    hudson
    【消息队列MQ】各类MQ比较
    日本出行
    使用Eclipse Installer安装Eclipse
    Firebug控制台详解
    浮动
    CSS3
    HTML制作视频简介
    使用I/O流复制指定文件
  • 原文地址:https://www.cnblogs.com/BradMiller/p/9680843.html
Copyright © 2011-2022 走看看