MySQL性能优化--优化数据库结构之优化数据类型

 

By:授客  QQ1033553122

 

优化数字数据(Numeric Data)

l   对于唯一ID或其它可用字符串或数字表示的值,选择用数字列好过用字符串列。因为相比对应的字符串,可使用更少的字节存储大数字,同时,转换并比较数字速度更快且消耗更少的内存。

参考连接:http://dev.mysql.com/doc/refman/5.7/en/optimize-numeric.html

优化字符和字符串类型(Character and String Type)

l   当不需要语言特定的比对功能时,使用二进制比对(binary collation)命令对来获取更快的比较和排序操作。在特定查询中使用BINARY 操作符以使用二进制比对。

eg:

mysql> SELECT 'a' = 'A';

-> 1

mysql> SELECT BINARY 'a' = 'A';

-> 0

mysql> SELECT 'a' = 'a ';

-> 1

mysql> SELECT BINARY 'a' = 'a ';

-> 0

l   当需要比较不同列的值时,尽可能为那些列定义相同的字符集和比对方法,避免执行查询时进行字符串转换。

l   对于小于8KB的列值,使用二进制VARCHAR,而非BLOB,GROPU BY和ORDER BY语句会生成临时表,如果原始表没包含任何BLOB列,那么这些临时表可使用MEMORY 存储引擎。

l   如果表包含字符串列,如名字和地址,但是许多查询不检索那些列,可考虑把这些字符串列拆分到一个单独的表,必要时使用携带外键的join查询。当MySQL检索来自某记录行的任意值时,它会读取包含该记录行(也可能还有其它相邻行)所有列的数据块。保持每个记录行尽可能的小,仅含最频繁使用的列,这样允许在每个数据块中放入更多的记录行。这样紧凑的表,可减少大部分查询带来的磁盘I/O和内存使用。

l   当在InnoDB表中使用随机生成的值作为主键时,如果可能的话,使用一个“升序值”(ascending value)如当前日期和时间作为其前缀。当连续的主键值在物理上连续存储时,可以加快InnoDB的插入和检索速度。

参考连接:

http://dev.mysql.com/doc/refman/5.7/en/optimize-character.html

优化BLOB

l   当存储一个包含文本数据的大二进制对象,考虑先压缩。当整个表都被InnoDB或MyISAM压缩过时不能使用该技术。

l   对于包含多列的表,为减少查询内存占用,不使用BLOB列的话可考虑把BLOB列拆分到单独的表,并在需要时使用join方式引用。

l   由于检索和展示BLOB值的性能要求和其它数据类型不一样,可以考虑把特定于BLOB的表放在不同的存储设备,甚至是一个单独的数据库实例。例如,检索一个BLOB可能需要一个大的顺序读磁盘(sequential disk read),相比SSD 设备,更适合传统的硬盘驱动。

l   与其直接比较长文本字符串的相等性,可在某个单独的列中存储长文本所在列列值的哈希,并为存储哈希值的列建立索引,查询的时候测试哈希是否相等(使用MD5()、CRC32()函数生成哈希值)。由于哈希函数会为不同输入生成重复结果,所以查询中还需要增加语句blob_column=long_string_value以防止错误的匹配。针对哈希值的更小,更容易的索引扫描有助于提高性能。

参考连接:

http://dev.mysql.com/doc/refman/5.7/en/optimize-blob.html

使用PROCEDURE ANALYSE

ANALYSE([max_elements[,max_memory]])

ANALYSE()检测来自查询的结果并返回分析结果,为每列的数据类型给出可能帮助减小表的优化建议。使用方法如下,直接把语句拼接到查询末尾:

SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])

eg:

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

可选参数:

l   max_elements:默认256,指定每列中,ANALYSE()关注的不重复值的最大数量。ANALYSE()用于检测优化数据类型是否应该为ENUM,如果有多余max_elements个补重复值,则ENUM不为建议类型。

l   max_memory:默认为8192,当ANALYSE()试图查找所有不重复值时,为每列分配的最大内存量。

注意:PROCEDURE ANALYSE()不能在UNION语句中使用。

参考连接:

http://dev.mysql.com/doc/refman/5.7/en/procedure-analyse.html

MySQL 性能优化--优化数据库结构之优化数据类型的更多相关文章

  1. MySQL 性能优化--优化数据库结构之优化数据大小

    MySQL性能优化--优化数据库结构之优化数据大小   By:授客  QQ:1033553122 尽量减少表占用的磁盘空间.通常,执行查询期间处理表数据时,小表占用更少的内存. 表列 l   尽可能使 ...

  2. MySql(十一):MySQL性能调优——常用存储引擎优化

    一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...

  3. 【MySQL优化】数据库结构优化

    原则: 设计表结构,字段类型,最小化磁盘存储的空间,减少IO.数据库操作中最为耗时的操作就是 IO 处理,大部分数据库操作 90% 以上的时间都花在了 IO 读写上面.所以尽可能减少 IO 读写量,可 ...

  4. mysql数据优化--数据库结构的优化

    1,比如存时间类型的就使用int类型   其中mysql的两个函数可以拿来使用 unix_timestamp 将时间日期转化为时间戳

  5. mysql性能优化学习笔记-参数介绍及优化建议

    MySQL服务器参数介绍 mysql参数介绍(客户端中执行),尽量只修改session级别的参数. 全局参数(新连接的session才会生效,原有已经连接的session不生效) set global ...

  6. MySQL-快速入门(14)MySQL性能优化

    1.MySQL性能优化包括查询速度优化.数据库结构优化.数据库服务器优化等. 优化的切入点:合理的结构设计.表结构.索引.查询语句. 2.show status查询数据库的性能参数 show stat ...

  7. mysql性能优化学习笔记(1)优化目的、方向及数据库准备

    前言: 最近参加面试,问到了很多关于mysql的优化方面的问题,回答的不是很好,也是因为原先做的项目流量不是很大,所以对mysql优化不是太了解,所以趁着周末,恶补一下. 本文来源于慕课网sqlerc ...

  8. MySQL性能优化方法二:表结构优化

    原文链接:http://isky000.com/database/mysql-perfornamce-tuning-schema 很多人都将 数据库设计范式 作为数据库表结构设计“圣经”,认为只要按照 ...

  9. MYSQL 数据库结构优化

    数据库结构优化 优化数据大小 使表占用尽量少的磁盘空间.减少磁盘I/O次数及读取数据量是提升性能的基础原则.表越小,数据读写处理时则需要更少的内存,同时,小表的索引占用也相对小,索引处理也更加快速. ...

随机推荐

  1. [Swift]扩展UIImage :获取图片指定像素的颜色值

    对[UIImage]进行扩展 import UIKit extension UIImage{ /** 根据坐标获取图片中的像素颜色值 */ subscript (x: Int, y: Int) -&g ...

  2. java8 parallel并行处理实战

    需求 我需要做一个人员某几项数据的统计,由于数据量较大,不能一次性加载到内存进行统计.所以采用了遍历每个用户.当然也可以分配处理. 分析需求可得知,每个用户其实互不相关,数据的统计可以同步进行,因此考 ...

  3. kubernetes集群搭建(7):常见问题及处理

    尤其在创建pod的时候,会遇见各类问题,请通过下列命令来查看错误详情 kubectl describe pod xxxxxx 1.问题现象:镜像始终获取不下来 解决办法:为docker设置镜像源 [r ...

  4. iOS-微信支付商户支付下单id非法

    最近在APP中WKWebView中调用微信支付的时候,一直报商户支付下单id非法.看了n边微信文档,度娘了n次-----仍未解决.因为安卓的支付是没有问题的所以就跟安卓兄弟要了最终调用微信的字符串: ...

  5. 从 moment -> nodejs -> sequelize -> postgres,你都得设置好时区

    背景 最近在做报表统计,因为 sequelize 的时区配置没加导致了统计数字对不上的问题. 问:大家都知道时区,但是你清楚 UTC 和 GMT 的区别吗? 答:UTC 是我们现在用的时间标准,GMT ...

  6. typescript 的安装

    1.全局安装 typeScript 包       npm install typescript -g (tsc -v 查看ts版本)2.解决模块的声明文件问题   npm install @type ...

  7. Jmeter参数化的方法

    测试接口时,使用Jmeter在请求中输入参数,若是有多种情况,有多条测试参数,是不是要每个情况逐条输入呢?逐条输入会让人觉得比较麻烦,因此,就有了Jmeter参数化. Jmeter参数化的方法: 用户 ...

  8. 急速JavaScript全栈教程

    3 天前  ·  3k 次阅读 急速JavaScript全栈教程 javascript node.js  mongodb 140 自从一年前发布了Vuejs小书的电子书,也有些日子没有碰过它们了,现在 ...

  9. Spark SQL读取hive数据时报找不到mysql驱动

    Exception: Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the "BoneC ...

  10. 如何才能够系统地学习Java并发技术?

    微信公众号[Java技术江湖]一位阿里Java工程师的技术小站 Java并发编程一直是Java程序员必须懂但又是很难懂的技术内容. 这里不仅仅是指使用简单的多线程编程,或者使用juc的某个类.当然这些 ...