MySQL有多种存储引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
每种存储引擎有各自的优缺点,以下列出常用几种的特点:MyISAM HEAP InnoDB 支持事务 支持外键(version 5.0,only the storage engine level support) 行级锁 多版本支持 主键聚集,所有InnoDB表都依赖于主键聚集 所有的非主键索引内容包含主键列的值 最优化缓存,缓存中包含索引和数据,innodb_buffer_pool_size.InnoDB缓存采用的是自动hash便于查找 非压缩的索引 缓慢的数据加载,因为MySQL 5.0没有特别优化数据加载操作,每条记录建一次索引,所以大数据量的服务重启会很慢。 AUTO_INCREMENT锁表,在MySQL 5.1以前的InnoDB中,如果主键列采用了AUTO_INCREMENT则是表级锁。在MySQL5.1以后支持innodb_autoinc_lock_mode,默认值1,含义是bulk insert。0是传统的表级锁,2是交叉的表级锁(interleaved:fastest and most scalable lock mode,but not safe)。 不缓存COUNT(*)的值
Mysql该如何选择储存引擎: 1.>采用MyISAM 读写比>100:1的 而且更新比较小; 并发不高,不需要事务; 表数据量较小; 硬件资源有限; 2.>采用InnoDB引擎; 读写比较小,频繁更新; 表的数据量较大,超过千万,并发高; 安全性和可靠性高; 3.>采用HEAP(Memory)引擎 有足够的内存; 对数据的一致性要求不高,如在线人数和session等应用; 需要定期归档的数据;
mysql服务器优化措施: 适度使用Query Cache 增加MySql允许的最大连接数 对于MyISAM表适当增加key_buffer_size,如果key_cache命中率的值大于%1就要适当增加key_buffer_size的值。 对于MyISAM需要注意table_cache的设置,需要适当确定table_cache的大小,过小的话,系统的table_cache不够用的时候,会采用LRU适当踢掉最长时间没有使用的表。 从表中删除大量的行后,可运行OPTIMIZE TABLE TableName进行碎片整理。
本帖参考了PHP核心技术与最佳实践一书。
|