MySQL数据表的优化

优化表的数据类型

表需要使用何种数据类型,是需要根据应用来判断的。虽然应用设计的时候需要考虑字段的长度留有一定的冗余,但是不推荐让很多字段都留有大量的冗余,这样即使浪费存储也浪费内存。


我们可以使用PROCEDURE ANALYSE()对当前已有的应用进行表类型的判断,该函数可以对数据表中的数据类型提出优化建议,可以根据应用的实际情况酌情考虑是否实施优化,语法:

输出的每一列信息都会对数据表中的数据类型提出优化建议。第二个例子告诉PROCEDURE ANALYSE()不要为那些包含的值多于16或者256直接的ENUM类型提出建议。如果没有这样的限制,输出的信息可能更长;ENUM定义通常很难阅读。

在对字段类型进行优化时,可以根据统计信息并结合实际情况对其进行优化。


通过拆分,提高表的访问效率

这里说的拆分、主要是针对MyISAM类型的表,拆分的方法可以分成两种情况:

1)纵向拆分

纵向拆分是按照应用访问的频度,将表中经常访问的字段和不经常访问的字段拆分成两个表,经常访问的字段尽量是定长的,这样可以有效地提高表的查询和更新速度。

2)横向拆分

横向拆分是按照应用的情况,有目的的将数据拆分成几个表或者通过分区分到多个分区中,这样可以有效避免MyISAM表的读取和更新导致的锁问题。


逆规范化

数据库的规范化设计强调数据的独立性,数据应该尽量减少冗余,因为存在过多的冗余数据,就意味着要占用更多的物理控件,同时也对数据的维护和一致性检查带来了问题。

但是对于查询操作很多的应用,一次查询可能需要访问多张表来进行,如果通过冗余记录在相同表中,更新的代价增加不多,但是查询操作效率可以有明显提高,这种情况就可以考虑通过冗余数据来提高效率。


使用冗余统计表

使用CREATE Temporary Table语法,它是基于session的表,表的数据保存在内存中,当session断掉后,表自然消除。

对于大表的统计分析,如果统计的数量不大,利用Insert、Select将数据迁移到临时表中比直接在大表上做统计要有效率很多。


选择更合适的表类型

1)如果应用出现比较严重的锁冲突,那就应该考虑是否更改存储引擎到InnoDB,行锁机制可以有效地减少锁冲突的出现。

2)如果应用查询操作很多,且对事务完整性要求不严格,则可以考虑使用MyISAM存储引擎






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值