MySQL 优化 叶金荣 (imysql@gmail.com) Linux 宝库 http://www.linuxmine.com MySQL 中文网 http://imysql.cn 2007-01-27 M y S Q L 优 化 -- 硬 件 、 操 作 系 统 、 软 件  升级硬件,使用更好的服务器  升级操作系统内核以支持更多特性  升级到 MySQL 最新稳定版本,具备更多新功 能,新版本对某些地方进行优化,使得更稳定 和高效  配置优化  SQL 语句优化  应用程序优化 MySQL 版本 -- 4 . 0 / 4 . 1 v s 5 . 0  优化子查询 (sub query  优化表连接 (join)  支持触发器  支持存储过程  支持元数据 (meta data)  支持集群  对 myISAM/InnoDB 等引擎的改善  对复制 (replication) 的改进 存 储引擎 -- M y I S A M , I n n o D B , 其 他  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 优化 - 1 ● 如果数据库 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 优化 - 2 ● 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 是组里日志文件的数目 其 他优化 -- 1 ● char 型 vs int 型 ● 独立索引 vs 联合索引 ● 记录 slow queries ● 使用存储过程、触发器、视图 ● 定期执行 optimize / analyze table ● 针对 Innodb 表 , 尽量不执行 SELECT COUNT(*) 语句 ● 善用 EXPLAIN 来帮助你分析查询优化情况 ● 如果需要对一个较大的且并发读写较多的数据表做 GROUP BY 等统 计操作 , 建议使用摘要表来存储统计信息 , 定期更新统计表 ● 查询时如果有 ORDER BY 分句的话 , 注意让它的字段顺序和索引字段 顺序对应 , 这样能加快排序速度 其 他优化 -- 2 ● 表连接时 , 连接字段的类型最好一致 ( 包括字段长度 ), 这样的话索引 速度快多了 ● 大部分情况下 , 字符类型的字段索引值需要一部分 ●  尽量使用最合适的数据类型,不要浪费空间和效率 ● 执行查询时 , 尽量不使用外部函数 , 因为这样的话就无法使用可能存 在的索引 ● 把拖沓复杂 , 速度慢的的查询分解成多个简洁明了的查询 ● 在索引字段上使用 LIKE 查询时 , 左边不要使用 '%' 修饰符 , 这样就 可以利用索引 , 否则无法使用索引 . 如 ... `name` LIKE 'yejr%' ● 对于频繁更改的 MyISAM 表 , 应尽量避免更新所有变长字段 (VARCHAR 、 BLOB 和 TEXT) ● 分摊压力,使用集群 / 复制 结束了 结束了 祝大家的系统健壮的和猛牛一样 ^_^
还剩9页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

sunjavac

贡献于2014-06-10

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf