Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17852
  • 博文数量: 22
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-18 10:33
文章分类
文章存档

2015年(22)

我的朋友

分类: Mysql/postgreSQL

2015-02-28 19:33:50

1. 优化数据大小

    设计表来减少磁盘空间。通过减少数据写入到量与从磁盘读取量,可以使性能得到巨大的提升。较小的表内容通常是需要频繁访问而且需要较少的内存。

    MySQL支持许多不同的存储引擎(表类型)和行格式。选择应用程序的适当的表格式可以带来巨大的性能增益。

    可以利用下面的技术得到更好的性能表和减少存储空间:

   

    表的列(Table Columns):
  • 尽可能使用最有效的(最小的)数据类型。MySQL有许多特殊类型,节省磁盘空间和内存。例如:如果可以使用更小的整数类型将得到更小的表。MEDIUMINT往往比int的一个更好的选择,因为MEDIUMINT列少占用25%空间。

  • 尽可能不声明列值为NULL。这样SQL操作会更快,能够更好地利用索引和排除为NULL值得列。还为每个列节省了空间。如果不能避免使用NULL,应该避免默认设置每列允许空值。

    行格式(Row Format):
  • InnoDB表使用一个紧凑的存储格式。在MySQL 5.0.3以前版本的中,InnoDB行中包含一些冗余信息,如列数和每列的长度,即使是固定大小的列。默认时,表在紧凑的格式创建(ROW_FORMAT=COMPACT)。
    紧凑的行格式的存在降低了约20%行的存储空间作为代价增加一些CPU使用操作。如果CPU使用率过高,将会影响速度。

  • 紧凑的InnoDB格式也改变了包含UTF-8数据CHAR列存储。当ROW_FORMAT=REDUNDANT,一个UTF-8 Char(N)占用N*3bytes,指定一个UTF-8编码的字符的最大长度是三个字节。许多语言可以写主要用单字节UTF-8字符,所以一个固定的存储长度通常会浪费空间。当格式为ROW_FORMAT=REDUNDANT时,InnoDB存储变量分配量为3×N bytes范围如果有必要从这些列剥离尾随空格。最小的存储长度保持为N字节。

  • 为了最大限度地减少空间进一步压缩形式存储表数据,当创建InnoDB表时指定ROW_FORMAT=COMPRESSED,或对一个存在的MyISAM表运行myisampack命令(Innodb表压缩表是可读可写的,MyISAM压缩表是只读的)。

  • 对于MyISAM表,如果你没有任何可变长度列(VARCHAR, TEXT, or BLOBcolumns),使用固定尺寸的记录格式。这将更快,但可能会浪费一些空间。如果想固定VARCHAR列长度,在创建表时指定ROW_FORMAT=FIXED

    索引(Index)
  • 一个表的主索引应该尽可能短。这使得每一行可以简单而有效的识别。对于InnoDB表,主键列中复制每个二级索引,所以如果有多个二级索引较短的主键节省了大量的空间。

  • 创建恰当的索引能够提高查询性能。索引可以加速查询,但减慢了插入和更新操作。如果你访问一个表主要是通过搜索列的组合,创建一个单一的复合索引性能将超过为每列一个单独创建的索引。该索引的第一部分应该是最常用的列。

  • 如果它非常有可能是一长串列的首几个字符,更好的指标只有这个前缀,使用MySQL支持的创建左部前缀索引。更短的索引速度更快,不仅是因为他们需要更少的磁盘空间,但是因为他们将在索引缓存中提供更多的访问从而减少磁盘寻道。

    Joins
  • 在某些情况下,通常分开扫描两个表是有好处的。如果如果当扫描表时它是一个动态格式的表并且另一个表是可能时较小的静态格式的表这是尤其正确的。

  • 声明列在不同表中是相同的数据类型相同的信息。joins基于在相应的列执行速度将更快。

  • 保持简单的列名称,所以你可以在不同的表使用相同的名称和简化查询连接。例如,在一个名为customer表中,使用名为name的列代替名为customer_name的列。考虑到可以使表可以容易的在其他服务器创建,名称不要超过18个字符。

    标准化(Normalization)
  • 通常,设法使所有数据非冗余的保留。

  • 如果速度比磁盘空间并保持多个副本数据的维护成本更。例如,一个商务智能的情况下,分析大表的所有重要数据,可以放松标准规定,获得更快的速度可以复制信息或创建汇总表

    















阅读(281) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~