现在的位置: 首页 > 综合 > 正文

MySQL优化之——表策略和索引

2013年08月25日 ⁄ 综合 ⁄ 共 860字 ⁄ 字号 评论关闭

本文试图从数据表创建的策略(schema)和索引的角度描述优化选择。

最优化数据类型

  1. 数据越小越好。选择满足需求的最小数据类型。通过节省更多的磁盘空间,内存以及cache,使得你的数据库更快。
  2. 选择简单的类型。整形值相比于字符型的代价较小,因为字符集和校对规则的关系。比如说应该存储日期和时间,而不是个字符串;IP地址也应该用数字保存。
  3. 尽可能的避免NULL。尽量把数据列定义为NOT NULL。可为NULL的列使得索引的实现更加复杂,查询更难优化。

整型

      TINYINT  SMALLINT  MEDIUMINT  INT  BIGINT

  字节  1              2                3              4       8

UNSIGNED属性可以修饰以上类型,而像INT(11)后面的11只是输出显示的位数,并不影响数据存储和计算。

 

实数

FLOAT和DOUBLE是浮点型,分别占4,8字节。如果要保存确切的数,需要DECIMAL类型。

DECIMAL类型以bit string的形式存储。尽量用前者,因为DECIMAL消耗更多的存储空间和计算时间。

 

字符串类型

不同的存储引擎对于CHAR和VARCHAR的实现是不同的。

VARCHAR:一般情况下VARCHAR只存储所需的字节空间,不过当MyISAM设置了FIXED 的ROW_FORMAT时例外。

                 VARCHAR在数据前用1~2字节来存储实际数据的长度。不过对于存储所需长度方法,当数据更新空间不够时会变得麻烦。

                 数据中的前导和后附的空格都存入和可读出。

CHAR:     不存储后面的空格。当存储少量的字符串或者数据长度较接近时,可以采用该类型。

 

尽量不使用BLOB和TEXT类型。

 

当值可以确定时,可用ENUM代替字符串类型。

 

索引

  1. 孤立WHERE字节中的列。意思就是条件语句中要想用上index,则该列不能处于左边的表达式中或函数中:如where id+1 = 5  。
  2. 对于过长的列使用前缀索引

   

抱歉!评论已关闭.