> 数据库 > MySQL >

MySQL MyISAM与Innodb优化方案比较

Mysql MyISAM InnoDB 优化


MYSQL 配置原则配置合理的MySQL MySQL最合理的使用针对MyISAM或InnoDB 针对不同的应用情况进行合理配置针对my.cnf
进行配置,后面设置是针对内存为2G的服务器进行的合理设置
公共选项

Mysql MyISAM InnoDB 优化

MyISAM选项

Mysql MyISAM InnoDB 优化


InnoDB选项

Mysql MyISAM InnoDB 优化


MyISAM和InnoDB存储引擎性能

Mysql MyISAM InnoDB 优化
Mysql MyISAM InnoDB 优化

MyISAM和InnoDB
存储引擎性能差别并不是很大,针对InnoDB来说,影响性能的主要是
innodb_flush_log_at_trx_commit这个选项,如果设置为1 关系,设置为0效率能够看到明显提升,当然,同样你可以SQL
中提交“SET AUTOCOMMIT = 0”来设置达到好的性能。
同时也可以看出值得使用InnoDB来替代myISAM引擎来进行开发,毕竟
InnoDB有多数据库特性、更良好的数据存储性能和查询性能MySQL技巧分享

Mysql MyISAM InnoDB 优化
Mysql MyISAM InnoDB 优化

 

Mysql MyISAM InnoDB 优化
Mysql MyISAM InnoDB 优化

 

Mysql MyISAM InnoDB 优化

------------------------------------------------------------ 存储引擎- - My I SAM, I n n oDB ,其他
MyISAM 相对更适合插入不多不频繁,查询较多的应用环 WAL(write ahead logging)
 InnoDB适合大并发写入和查询的环境:支持事务(ACID 空间(不受大文件限制)
 Merge其实就是MRG_MyISAM,适用于将相同类型的多索引的好处
 ARCHIVE存储引擎被用来以非常小的覆盖区存储大量无
索引数据。 是只读类型。MyISAM 优化
key_buffer_size 分配给MyISAM索引缓存的内存总数
● query_cache_size 控制分配给查询缓存的内存总量
● long_query_time 设定慢查询时间
● external-locking 禁止使用外部锁,可预防死锁
● back_log 临时停止响应新请求前在短时间内可以堆起多少请求。如 ● table_cache 缓存数据表的数量,避免重复打开表的开销
● thread_cache_size 缓存可重用线程数,见笑创建新线程的开销
● sort/join/read buffer size 分配给每个线程中处理排序/扫描表连 ● skip-bdb 等,禁用不必要的引擎InnoDB 优化 ● 如果数据库CPU使用率小于70%,则MySQL的压力可能在于磁盘大一些,但不要设置缓冲池等于或超过物理内存的80%
● 把多个修改(INSERT/UPDATE/DELETE)放在一个事务里。但是也要 ● innodb_flush_log_at_trx_commit 设置为0(每秒刷新),1(实时
刷新),2(只写日志文件,不刷新到磁盘) ● 往innoDB表导入数据时,先关闭autocommit模式,否则会实时 ● 更多的请查看:http://imysql.cn/?q=node/116
innodb_buffer_pool_size 控制分配给包括集群数据以及
次要索引页的Innodb缓存的内存总数,默认16MB
● innodb_additional_mem_pool_size 控制分配给对
Innodb内部数据字典进行排序所需的缓冲,默认1MB
● innodb_log_buffer_size 控制分配给对Innodb存储提前
写日志记录所需的缓冲,默认1MB
● innodb_log_files_in_group 在日志组里日志文件的数
目。InnoDB以循环方式写进文件。默认是2(推荐)
● innodb_log_file_size 默认是5MB。建议值从1MB到N
分之一缓冲池大小,其中N是组里日志文件的数目其他优化 - -
char 型 vs int 型
● 独立索引 vs 联合索引
● 记录 slow queries ● 定期执行optimize / analyze table
● 针对Innodb表,尽量不执行 SELECT COUNT(*) 语句
● 善用 EXPLAIN来帮助你分析查询优化情况
● 如果需要对一个较大的且并发读写较多的数据表做 GROUP BY 等统表连接时,连接字段的类型最好一致(包括字段长度),这样的话索引 ● 大部分情况下,字符类型的字段索引值需要一部分 ● 执行查询时,尽量不使用外部函数,因为这样的话就无法使用可能存 ● 把拖沓复杂,速度慢的的查询分解成多个简洁明了的查询
● 在索引字段上使用 LIKE 查询时,左边不要使用 '%' 修饰符,这样就
可以利用索引,否则无法使用索引.如 ... `name` LIKE 'yejr%'
● 对于频繁更改的MyISAM表,应尽量避免更新所有变长字段
(VARCHAR、BLOB和TEXT) ● 查询时如果有 ORDER BY分句

(责任编辑:IT)