mysql 之 schema与数据类型优化

一.选择优化的数据类型

 

    1.更小的通常更好:如果只要保存1~200,tinyint unsigned更好.因为占用更小的内存和磁盘空间.

    2.简单就好: 简单数据类型需要更小的CPU时间周期.例如:整型比字符操作代价更低(字符集的问题).使用mysql自带类型取代字符串(date,datetime),使用整型存储IP.

    3.尽量避免Null:单列索引无法储null值,复合索引无法储全为null的值.Innodb使用单独的位(bit)存储Null值,所以对于稀疏结构(列中大部分都是Null)有很好的空间效率.(不适用myisam).

  

    4.mysql数据类型可以存储相同类型的数据,只是存储的长度和范围不一样,允许的精度不同,需要的空间不同.

  例如:Datetime和timestamp可以存储相同类型的数据,然而timestamp只占用一半的空间.但是它有一个时间范围.

  

   1.1 整数类型      

 

   整数可以使用: tinyint,smallint,mediumint,int,bigint.分别使用8,12,16,24,32,64位存储空间.存储范围是-2的n-1次方到2的n-1次方.

 

   1.2 实数类型

 

   Decimal可以存储比bigint更大的整数.(最多允许65个数字)

 

  1.3 字符串类型

 

     varchar 

          比定长的更省空间,如果设置了ROW_FORMAT=FIXED 就不起作用.varchar需要额外一个或两个字节记录字符串长度.

          下列情况使用varchar是合适的: 字符串列的最大长度比平均长度大很多; 列的更新很少;使用 UTF8这样的字符集,每个字符使用不同字节数存储。

 

    char

         char类型是定长的:char会删除数据末尾的所有空格.

 

    enum

        使用枚举代替字符类型.

        例如: create table test { e enum('fish','apple','pear') not null}.

        select e + 0 from test 结果会是数字

 

 二.加快alter table速度

 

     alter table modify column ....   会拷贝整张表到另一张表

     alter table alter column...   只修改.frm文件而不涉及表数据,这个操作很快

 

三.快速创建myisam索引

    

     alter table  tablename disable keys;//禁用索引

     load data;

     alter table  tablename enable keys;//启用索引

     不过这种方法对于唯一索引不起作用

   

   

你可能感兴趣的:(mysql)