总结下MySQL存储引擎的区别和性能优化的一些方法

来源:互联网 发布:学英语的软件 编辑:程序博客网 时间:2024/05/29 16:31
MySQL 主要使用的存储引擎有MyISAM 和 InnoDB。
(一)、MyISAM
MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非配置MySQL默认使用另外一个引擎。
(二)、 InnoDB
InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB是为在处理巨大数据量时获得最大性能而设计的。它的CPU使用效率非常高。和MyISAM相比需要较多的内存和磁盘空间。

MySQL的性能优化的方法:数据库设计和查询优化,服务器端优化,存储引擎优化。
1、数据库设计:
A、对于数据量较大的表的设计往往是粗粒度的,也会冗余一些必要的字段,已达到尽量用最少的表、最弱的表关系去存储海量的数据。并且在设计表时,一般都会对主键建立聚集索引,含有大数据量的表更是要建立索引以提供查询性能。
B、添加必要的(冗余)字段:像“创建时间”、“修改时间”、“备注”、“操作用户IP”和一些用于其他需求(如统计)的字段等,在每张表中必须都要有,不是说只有系统中用到的数据才会存到数据库中,一些冗余字段是为了便于日后维护、分析、拓展而添加。
C、设计合理的表关联:若多张表之间的关系复杂,建议采用第三张映射表来关联维护两张表之间的关系,以降低表之间的直接耦合度。若多张表涉及到大数据量的问题,表结构尽量简单,关联也要尽可能避免。
D、选择合适的主键生成策略:主键生成策略大致可分:int自增长类型(identity、sequence)、手动增长类型(建立单独一张表来维护)、手动维护类型(如userId)、字符串类型(uuid、guid)。int型的优点是使用简单、效率高,但多表之间数据合并时就很容易出现问题,手动增长类型和字符串类型能很好解决多表数据合并的问题,但同样也都有缺点:前者的缺点是增加了一次数据库访问来获取主键,并且又多维护一张主键表,增加了复杂度;而后者是非常占用存储空间,且表关联查询的效率低下,索引的效率也不高,跟int类型正好相反。

2、查询优化:
使用索引:
使用EXPLAIN分析查询:
调整MySQL(和PHP搭配之最佳组合)的内部配置:
A、改变索引缓冲区长度(key_buffer)
B、改变表长(read_buffer_size)
C、设定打开表的数目的最大值(table_cache)
D、对缓长查询设定一个时间限制(long_query_time)【MySQL(和PHP搭配之最佳组合)带有“慢查询日志”,它会自动地记录所有的在一个特定的时间范围内尚未结束的查询。】

未完待续..................
0 0
原创粉丝点击