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

2015年(22)

我的朋友

分类: Mysql/postgreSQL

2015-02-28 19:37:37

8.4.2.1. Optimizing for Numeric Data

  • 独特的ID或其他的值可表示为字符串或数字。由于大数值可以比相应的字符串存储需要更少的字节,所以它将更快和占用更少的内存。

  • 如果使用的是数字数据,在很多情况下它的速度更快,从数据库中获取信息(使用活连接)比访问文本文件更快。在数据库中的信息格式比在文本文件中可能会储存的更紧凑,所以访问它涉及较少的磁盘访问。也可以节省应用程序中的代码,可以避免解析文本文件中找到行和列边界。

8.4.2.2. Optimizing for Character and String Types(优化的字符和字符串类型)

  • 使用二进制快速排序和分类(sort )等操作,当不需要的特定语言的排序规则的特点。你可以使用BINARY 在一个特定的查询使用二进制排序规则。

  • 当比较不同列时,尽可能声明这些列为相同的字符集,这样在运行查询期间可以避免字符串转换。

  • 当列值的大小少于8KB时,使用二进制VARCHAR代替BLOB。GROUP BY和ORDER BY子句可以生成临时表,这些临时表可以在原表不包含任何BLOB列时使用MEMORY存储引擎。

  • 如果一个表包含字符串列如姓名和地址,但许多查询不访问这些列,考虑将该字符串列为一个单独的表,必要时使用联接查询一个外键。当MySQL从一行检索任何值,它读取一个数据块包含该行的所有列(和其他可能的相邻的行)。保持每行最小,只有使用最频繁的列,允许每个数据块存储更多的行。这种紧凑的表在通用查询时将会减少磁盘I/O和内存使用。

  • 当你使用一个随机生成的值作为一个innodb表主键,如果可能的话提升前缀的值如当前的日期和时间。当连续的主键的物理存储彼此靠近,InnoDB可以提高插入和检索速度。

  • 将字符和字符串类型更换为数值型。

8.4.2.3. Optimizing for BLOB Types(优化BLOB类型)

  • 当存储大的BLOB包含文本数据,首先考虑压缩。当整个表时InnoDB或MyISAM压缩时不要使用这种技术。

  • 当表有多个列时,为了减少查询不使用BLOB列存储要求,需要的时候考虑将BLOB列为一个单独的表和引用与连接查询。

  • 从性能来考虑从其他数据类型检错并显示BLOB值可能是非常困难的,你可以把blob特定的表在不同的存储设备,甚至是一个单独的数据库实例。例如,检索一个BLOB可能需要一个大的顺序磁盘读取,传统的硬盘比一个SSD设备更适合。

  • 可以参考优化的字符和字符串类型(Optimizing for Character and String Types) 为什么一个二进制VARCHAR列有时比BLOB列更有效。

  • 可以存储的哈希值的列值在一个单独的列,索引,列,和测试的散列值查询。(使用MD5()CRC32()函数生成的哈希值)。由于散列函数可以产生不同的输入重复的结果,包括一个子句 and blob_column = long_string_valuein查询防止错误的匹配。的性能优势来自于规模较小,容易扫描散列值指数。

8.4.2.4.使用PROCEDURE ANALYSE(Using PROCEDURE ANALYSE)

    ANALYSE([max_elements[,max_memory]])

    ANALYSE() 检查的结果从一个查询并返回结果表明每一列,可能有助于减少表的大小的最佳数据类型分析。获得这一分析,添PROCEDURE  ANALYSE 到SELECT 命令最后:
        SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])

    例如:
    SELECT col1, col2 FROM table1 PROCEDURE ANALYSE(10, 2000);

    结果表明对于一些统计查询所返回的值,并提出了一个最佳的列的数据类型。这可以帮助检查现有表,或引进新的数据。可能需要尝试不同的设置参数,程序analyse()不建议ENUM 数据类型的时候是不合适的。

    可选参数如下:
  • max_elements(默认256)是analyse()通知每列的最大不同值的数量。这是用analyse()是否最佳的数据类型应该是ENUM类型;如果有超过max_elements不同的值,然后ENUM时不建议类型。

  • max_memory(默认8192)是analyse()应该分配每列在试图找到所有的不同的值的最大内存量。


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