Mysql优化(1)——表优化

原创 2015年11月17日 23:42:59

MYSQL优化

MySQL优化一直是个头痛的问题,由于自己刚接触MySQL不久,故把自己的学习过程记录于此。

mysql的优化不是指某个sql的优化,而是多种优化的组合,以下列表列出一般优化的过程。

  • 表的设计优化(符合3NF)
  • 索引
  • sql优化
  • 分表技术
  • 读写分离
  • 存储过程
  • mysql配置的优化
  • MySQL服务器硬件优化
  • 清除不需要数据,定时整理碎片(MyISAM引擎)

表优化

mysql表的优化主要是指标的设计要符合理念;

1、首先表的设计要满足3NF

数据库3NF

第一范式:表的属性具有原子性,不可再分解。即表的列不可再分解。现在的关系型数据库都满足第一范式。

第二范式:表中的记录要唯一,既不能出现完全相同的一行数据,可设计主键来满足第二范式。

第三范式:避免不必要的冗余数据,就是说,表的字段信息,如果能够被推导出来,就不应该单独的设计一个字段来存放.

2、为每个表选择合适的引擎

MySQL支持多种存储引擎,每种都有自己的特色。下列表列出来MySQL的存储引擎;

  1. MyISAM
  2. IBMDB2I
  3. InnoDB
  4. MEMORY
  5. MERGE
  6. FEDERATED
  7. ARCHIVE
  8. CSV
  9. EXAMPLE
  10. BLACKHOLE

下面就常用的三个引擎做少许说明,

MyISAM

MyISAM引擎是3.23版本后的默认存储引擎,即当你在创建表时若没有指定存储引擎,则默认是myisam引擎的,该引擎的表能存储更多的数据,查询速度快,但无法处理事务等高级特性。

myisam引擎创建的表又分三种格式:静态、动态、压缩;
关于静态MyISAM和动态MyISAM是指当表的任一列都不含varchar,text,blog,xblog,xtext时,MySQL就认为该表是静态的。

静态MyISAM类型的表的性能很高,因为在维护和访问以预定义存储的数据时开销很低而且最不可能出现因数据损坏而失败的情况,但缺点是消耗空间资源,每列都需要为该列分配最大空间而不管是否使用。(如某字段类型为char(20), 当该字段只存了 ‘aaaa’ 四个字节时,其依旧占用了20字节的存储空间)。

动态MyISAM:虽然MyISAM动态占用的空间比静态格式的少,但容易参数碎片。如某个字段的内容改变时,则该字段存储在磁盘的位置可能需要移动,这会导致碎片的产生,当碎片过多时就会严重影响性能。这有两种解决方案:
1:尽量使用静态数据类型
2:使用 optimize table 整理表的碎片

在整个应用程序生命周期都可读是,就应该把设计为MyISAM压缩格式的,可以用myisampack工具来将其转换为myISAM压缩表以减少占用空间

InnoDB
INnoDB是一个精壮的事务型存储引擎。是以下情况的理想引擎:

  • 更新密集的表
  • 事务
  • 灾难恢复

MEMORY

改引擎的表数据存储在内存中, 速度最快,但当MySQL进程崩溃时,所有的MEMORY数据都会丢失。


版权声明:本文为博主原创文章,未经博主允许不得转载。

MySQL表结构优化、数据类型选择方法

思维导图   点击图片,可查看大图。    介绍   情况:如果你的表结构设计不良或你的索引设计不佳,那么请你优化你的表结构设计和给予合适的索引,这样你的查询性能就能提高几个数量级。——...
  • aya19880214
  • aya19880214
  • 2015年05月20日 15:48
  • 1717

mysql 字段优化

字段选型及属性优化 1.设计问题 在新建一个表或者优化表的过程中,我们的思路一般是:存储什么样的数据,需要多大的空间,不同的定义对性能的影响。 1.       列中将存储什么样的数...
  • shine0181
  • shine0181
  • 2014年01月15日 14:02
  • 3782

MySQL性能优化四之数据库结构优化

1.选择合适数据类型 1.1.使用可以存储你数据类型的最小数据类型。 1.2.使用简单的数据类型。 1.3.尽量使用NOT NULL定义字段。 1.4.尽量少用大的类型(text),非用不可使...
  • moHedong
  • moHedong
  • 2016年08月29日 12:12
  • 714

MySQL in查询优化<一>

开发说他写了个SQL特别慢,让看看。 select * from t_channel where id_ in(select distinct cdbh from sjkk_gcjl where jg...
  • gua___gua
  • gua___gua
  • 2015年08月10日 17:57
  • 3935

inner join MySQL Profiles 三表内联查询效率优化

今天系统爆出一个慢SQL语句,经过分析确定查询时间过长的原因主要是数据量大三张表内联耗时较长;经过重新设计将不必要的内联逻辑排除,成功的将查询时间降低一个数量级。...
  • mrlichengyi
  • mrlichengyi
  • 2017年06月25日 17:29
  • 504

MySQL性能调优——锁定机制与锁优化分析

——针对多线程的并发访问,任何一个数据库都有其锁定机制,它的优劣直接关系着数据的一致完整性与数据库系统的高并发处理性能。锁定机制也因此成了各种数据库的核心技术之一。不同数据库存储引擎的锁定机制是不同的...
  • zhangliangzi
  • zhangliangzi
  • 2016年05月16日 20:36
  • 2097

mysql优化——表分区

所谓分区就是将一个表分解成多个区块进行操作和保存,从而减少每次操作的数据,提高性能。而对应用来说是透明的,从逻辑上看是只有一个表(这里跟分库分表的访问不一样),但在物理上这个表可能是由多个物理分区组成...
  • sunqingzhong44
  • sunqingzhong44
  • 2017年06月02日 07:58
  • 212

详解MySQL大表优化方案

当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:单表优化、字段、索引、查询SQL、引擎等。...
  • yin767833376
  • yin767833376
  • 2016年08月04日 18:00
  • 2874

MySQL单表查询优化技巧

本文的原文地址在此:https://www.percona.com/blog/2015/04/27/indexing-101-optimizing-mysql-queries-on-a-single-...
  • zhu19774279
  • zhu19774279
  • 2015年06月23日 16:55
  • 3063

MySQL 大表优化方案

当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以...
  • Quiet_boy
  • Quiet_boy
  • 2016年12月26日 11:33
  • 300
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mysql优化(1)——表优化
举报原因:
原因补充:

(最多只允许输入30个字)