`

Mysql MyISAM InnoDB 优化

 
阅读更多

MySQL历史



MYSQL 配置原则

配置合理的MySQL
服务器,尽量在应用本身达到一个
MySQL最合理的使用针对MyISAM或InnoDB
不同引擎进行不同定制性配置
针对不同的应用情况进行合理配置针对my.cnf
进行配置,后面设置是针对内存为2G的服务器进行的合理设置



公共选项




MyISAM选项



InnoDB选项



MyISAM和InnoDB存储引擎性能





MyISAM和InnoDB
存储引擎性能差别并不是很大,针对InnoDB来说,影响性能的主要是
innodb_flush_log_at_trx_commit这个选项,如果设置为1
的话,那么每次插入数据的时候都会自动提交,导致性能急剧下降,应该是跟刷新日志有
关系,设置为0效率能够看到明显提升,当然,同样你可以SQL
中提交“SET AUTOCOMMIT = 0”来设置达到好的性能。
同时也可以看出值得使用InnoDB来替代myISAM引擎来进行开发,毕竟
InnoDB有多数据库特性、更良好的数据存储性能和查询性能

MySQL技巧分享














------------------------------------------------------------

存储引擎- - 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分句

分享到:
评论

相关推荐

    MyISAM引擎与InnoDB引擎性能的对比

    MyISAM引擎与InnoDB引擎性能的对比

    MyISAM InnoDB 区别

    InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度...

    myisam与innodb 区别 值得下载

    自己总结的 关于mysql存储引擎myisam innodb 的比较 两者区别 对面试会很有帮助

    MySQL数据库INNODB 表损坏修复处理过程

    MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了。innodb表损坏不能通过repair table 等修复myisam的命令操作。

    Mysql 的InnoDB引擎相关读书笔记

    Mysql 的InnoDB引擎的相关笔记 1.0.MySQL架构到innoDB架构.md 1.1.0.InnoDB——简介.md 1.1.1.InnoDB——关键特性.md 1.2.0.InnoDB内存结构——缓冲池.md ...1.4.4.0.Mysql文件——MYISAM文件.md 1.5.0.InnoDB锁系列

    MySQL存储引擎中的MyISAM和InnoDB区别详解

    在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问。为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数据库引擎(5.5版之前),由...

    MySQL存储引擎之争-InnoDB与MyISAM全面对决

    本文深入对比分析了MySQL的两大存储引擎InnoDB和MyISAM之间的区别,包括事务支持、数据恢复能力、并发控制、存储空间占用和读取性能等多个维度。通过详细的技术和场景分析, objectively评估两者的优缺点,并给出选择...

    mysql的myisam解决并发读写解决方法

    MyISAM在读操作占主导的...可一旦出现大量的读写并发,同InnoDB相比,MyISAM的效率就会直线下降,而 且,MyISAM和InnoDB的数据存储方式也有显著不同:通常,在MyISAM里,新数据会被附加到数据文件的结尾,······

    mysql DB引擎myisam与innodB

    InnoDB支持事务安全、Mysq唯一支持外键的存储引擎。使用要使用事务或者外键,InnoDB成为不二的选择。 但同时InnoDB提供了两种自动提交和手动提交两种选择(SET AUTOCOMMIT=0设置),根据文档所述,自动提交的性能...

    MyISAM和InnoDB引擎优化分析

    几天在学习mysql数据库的优化并在自己的服务器上进行设置,喻名堂主要学习了MyISAM和InnoDB两种引擎的优化方法,需要了解跟多的朋友可以参考下

    MySQL存储引擎MyISAM与InnoDB区别总结整理

    在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。 2、MyISAM与InnoDB存储引擎的主要特点 MyISAM存储引擎的特点是:表级锁、不支持事务和全文索引,适合...

    mysql 中InnoDB和MyISAM的区别分析小结

    InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,...

    MyISAM引擎与InnoDB引擎性能的对比.doc

    MyISAM引擎与InnoDB引擎性能的对比,

    8.MySQL存储引擎--MyISAM与InnoDB区别1

    8.MySQL存储引擎--MyISAM与InnoDB区别1

    mysql更改引擎(InnoDB,MyISAM)的方法

    本文实例讲述了mysql更改引擎(InnoDB,MyISAM)的方法,分享给大家供大家参考。具体实现方法如下: mysql默认的数据库引擎是MyISAM,不支持事务和外键,也可使用支持事务和外键的InnoDB。 查看当前数据库的所支持的...

    MySQL数据库MyISAM存储引擎转为Innodb的方法

    mysql数据库存储引擎为MyISAM的时候,在大访问量的情况下数据表有可能会出现被锁的情况,这就会导致用户连接网站时超时而返回502,此时就需要MySQL数据库MyISAM存储引擎转为Innodb。步骤如下:1、导出CentOS数据库的...

    MySQL MyISAM 与InnoDB 的区别

    1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务; 2. InnoDB支持外键,而MyISAM不支持。对一个...

    MySQL存储引擎中MyISAM和InnoDB区别详解

    InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度...

    大幅提升MySQL中InnoDB的全表扫描速度的方法

    主要介绍了大幅提升MySQL中InnoDB的全表扫描速度的方法,作者谈到了预读取和多次async I/O请求等方法,减小InnoDB对MySQL速度的影响,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics