MySQL 性能优化--优化数据库结构之优化数据类型
MySQL性能优化--优化数据库结构之优化数据类型
By:授客 QQ:1033553122
优化数字数据(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 性能优化--优化数据库结构之优化数据类型的更多相关文章
- MySQL 性能优化--优化数据库结构之优化数据大小
MySQL性能优化--优化数据库结构之优化数据大小 By:授客 QQ:1033553122 尽量减少表占用的磁盘空间.通常,执行查询期间处理表数据时,小表占用更少的内存. 表列 l 尽可能使 ...
- MySql(十一):MySQL性能调优——常用存储引擎优化
一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...
- 【MySQL优化】数据库结构优化
原则: 设计表结构,字段类型,最小化磁盘存储的空间,减少IO.数据库操作中最为耗时的操作就是 IO 处理,大部分数据库操作 90% 以上的时间都花在了 IO 读写上面.所以尽可能减少 IO 读写量,可 ...
- mysql数据优化--数据库结构的优化
1,比如存时间类型的就使用int类型 其中mysql的两个函数可以拿来使用 unix_timestamp 将时间日期转化为时间戳
- mysql性能优化学习笔记-参数介绍及优化建议
MySQL服务器参数介绍 mysql参数介绍(客户端中执行),尽量只修改session级别的参数. 全局参数(新连接的session才会生效,原有已经连接的session不生效) set global ...
- MySQL-快速入门(14)MySQL性能优化
1.MySQL性能优化包括查询速度优化.数据库结构优化.数据库服务器优化等. 优化的切入点:合理的结构设计.表结构.索引.查询语句. 2.show status查询数据库的性能参数 show stat ...
- mysql性能优化学习笔记(1)优化目的、方向及数据库准备
前言: 最近参加面试,问到了很多关于mysql的优化方面的问题,回答的不是很好,也是因为原先做的项目流量不是很大,所以对mysql优化不是太了解,所以趁着周末,恶补一下. 本文来源于慕课网sqlerc ...
- MySQL性能优化方法二:表结构优化
原文链接:http://isky000.com/database/mysql-perfornamce-tuning-schema 很多人都将 数据库设计范式 作为数据库表结构设计“圣经”,认为只要按照 ...
- MYSQL 数据库结构优化
数据库结构优化 优化数据大小 使表占用尽量少的磁盘空间.减少磁盘I/O次数及读取数据量是提升性能的基础原则.表越小,数据读写处理时则需要更少的内存,同时,小表的索引占用也相对小,索引处理也更加快速. ...
随机推荐
- LabVIEW(十三):同一个控件的输入和输出转换
1.实现功能:读取某些文件的数据并将这些数据显示在一个界面上,对界面上的数据进行修改后,将修改后的数据保存到源文件中. 2.显示功能: 程序框图右键>文件I/O>读取分隔符电子表格> ...
- 机器学习基石笔记:12 Nonlinear Transformation
一.二次假设 实际上线性假设的模型复杂度是受到限制的, 需要高次假设打破这个限制. 假设数据不是线性可分的,但是可以被一个圆心在原点的圆分开, 需要我们重新设计基于该圆的PLA等算法吗? 不用, 只需 ...
- 注意:Tomcat Get请求的坑!
Tomcat8.5,当Get请求中包含了未经编码的中文字符时,会报以下错误,请求未到应用程序在Tomcat层就被拦截了. Tomcat报错: java.lang.IllegalArgumentExce ...
- 课程四(Convolutional Neural Networks),第四 周(Special applications: Face recognition & Neural style transfer) —— 2.Programming assignments:Art generation with Neural Style Transfer
Deep Learning & Art: Neural Style Transfer Welcome to the second assignment of this week. In thi ...
- Java中IO流中的装饰设计模式(BufferReader的原理)
本文粗略的介绍下JavaIO的整体框架,重在解释BufferReader/BufferWriter的演变过程和原理(对应的设计模式) 一.JavaIO的简介 流按操作数据分为两种:字节流与字符流. 流 ...
- 从零开始学 Web 之 CSS3(二)颜色模式,文字阴影,盒模型,边框圆角,边框阴影
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 记录前台页面一些jQuery笔记
不知不觉工作两个月了,在这两个月,我成长很快学的很多,刚开始的时候,很多问题不懂,很多技术不会,当然作为实习阶段,很多不会的问题我都会去请教别人,在这里得感谢那些帮助我的人,但是经常去问别人问题,首先 ...
- 内核开发知识第二讲,编写Kerner 程序中注意的问题.
一丶函数多线程的安全问题 什么是函数多线程安全. 简单来说就是 ,一个函数在调用过程中.还没有返回的时候.再次被其他线程调用了.但是函数执行的结果是可靠的.就可以了说这个函数是安全的. 比如我们在用户 ...
- JavaWeb学习 (七)————HttpServletResponse对象(一)
一.HttpServletResponse对象介绍
- 使用Asp.Net Core MVC 开发项目实践[第一篇:项目结构说明]
先从下图看整体项目结构: Mango.Manager: 为后台管理项目 Mango.Web: 为前台项目 Mango.Framework.Core: 为常用的基础操作类项目 Mango.Framewo ...