首页 »数据库 » MySQL 数据库优化的具体思路方法介绍说明 »正文
MySQL 数据库优化的具体思路方法介绍说明
来源: 发布时间:星期三, 2010年5月26日 浏览:0次 评论:0
以下 ![](/icons/99993de.gif) 文章主要描述 ![](/icons/99993de.gif) 是MySQL数据库简单实用优化 ![](/icons/99993de.gif) 具体思路方法 ![](/icons/99993de.gif) 实现 ![](/icons/99993dou.gif) 中包括如何定期 ![](/icons/99993de.gif) 表进行分析和检查 ![](/icons/99993dou.gif) 以及如何正确对表进行定期 ![](/icons/99993de.gif) 优化 ![](/icons/99993dou.gif) 以下就是具体方案 ![](/icons/99993de.gif) 描述 ![](/icons/99993dou.gif) 希望在你今后 ![](/icons/99993de.gif) 学习中会有所帮助 1、定期分析表和检查表 分析表 ![](/icons/99993de.gif) 语法如下: 复制代码 代码如下: ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name[, tbl_name]...
以上语句用于分析和存储表 关键字分布 分析 结果将可以使得系统得到准确 统计信息 使得SQL能够生成正确 执行计划 如果用户感觉实际执行计划并不是预期 执行计划 执行 次分析表可能会解决问题 在分析期间 使用 个读取锁定对表进行锁定 这对于MyISAM DBD和InnoDB表有作用
例如分析 个数据表
复制代码 代码如下: analyze table table_name
检查表 语法如下:
复制代码 代码如下: CHECK TABLE tb1_name[,tbl_name]...[option]...option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
检查表 作用是检查 个或多个表是否有![](/icons/99993cuowu.gif) CHECK TABLE 对MyISAM 和 InnoDB表有作用 对于MyISAM表 关键字统计数据被更新
CHECK TABLE 也可以检查视图是否有![](/icons/99993cuowu.gif) 比如在视图定义中被引用 表不存在
2. 定期优化表
优化表 语法如下:
复制代码 代码如下: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name [,tbl_name]...
如果删除了表![](/icons/99993de.gif) 大部分 或者如果已经对含有可变长度行 表(含有 VARCHAR、BLOB或TEXT列 表)进行更多更改 则应使用OPTIMIZE TABLE命令来进行表优化 这个命令可以将表中 空间碎片进行合并 并且可以消除由于删除或者更新造成 空间浪费 但OPTIMIZE TABLE 命令只对MyISAM、 BDB 和InnoDB表起作用
例如: optimize table table_name
注意: analyze、check、optimize执行期间将对表进行锁定 因此 定注意要在MySQL数据库不繁忙 时候执行相关 操作
常用 SQL优化
我们在开发 时候常常用到 SQL语句 无非是INSERT、GROUPBY等等 对于这些SQL语句 我们如何进行优化?
1. 大批量插入数据
当用load命令导入数据 时候 适当 设置可以提高导入 速度 对于MyISAM存储引擎 表 可以通过如下方式快速 导入大量 数据
复制代码 代码如下: ALTER TABLE tb1_name DISABLE KEYS; loading the data ALTER TABLE tb1_name ENABLE KEYS;
DISABLE KEYS 和 ENABLE KEYS 用来打开或者关闭MyISAM表非唯 索引 更新 在导入大量 数据到 个非空 MyISAM表时 通过设置这两个命令 可以提高导入 效率 对于导入大量 数据到 个空 MyISAM表时 默认就是先导入数据然后才创建索引![](/icons/99993de.gif) 索引不用进行设置
复制代码 代码如下: load data infile '/home/mysql/text_txt' o table text
对于InnoDB类型 表 这种方式不能提高导入数据 效率 但也有几种针对InnoDB类型 表进行优化 方式
1. InnoDB类型 表式按照主键 顺序保存![](/icons/99993de.gif) 所以将导入 数据按照主键 顺序排序 可以有效提高导入数据 效率
2. 在导入数据前执行 SET UNIQUE_CHECKS=0 关闭唯 性校验 在导入结束后执行SET UNIQUE_CHECKS=1 恢复唯 性校验 可以提高导入 效率
3. 如果应用使用自动提交 方式 建议在导入前执行SET AUTOCOMMIT=0 关闭自动提交 导入结束后执行SET AUTOCOMMIT=1 打开自动提交 也可以提高导入效率
优化INSERT语句 当进行数据INSERT 时候 可以考虑采用以下几种方式进行优化
1. 如果同时从 个客户插入很多行 尽量使用多个值表 INSERT语句 这种方式将大大缩短客户端和MySQL数据库 链接、关闭等消耗 使得效率比分开执行 单个INSERT语句快.
例如: 复制代码 代码如下: insert o test values(1,2) insert o test values(3,4) insert o test values(5,6)
将上面 3句改为:insert o test values(1,2),(3,4),(5,6)......
2. 如果从区别客户插入很多行 能通过使用INSERT DELAYED 语句得到更高 速度
DELAYED 含义是让INSERT 语句马上执行 其实数据都被放在内存 队列中 并没有真正写入磁盘 这比每条语句分别插入要快得多;LOW_PRIORITY刚好相反 在所有其他用户对表 读写完后才进行插入
3. 将索引文件和数据文件分在区别 磁盘上存放
4. 如果进行批量插入 可以增加bulk_insert_buffer_size变量值 思路方法来提高速度 但是 这只能对于MyISAM表使用
5. 当从 个文本文件中装载 个表时 使用LOAD DATA INFILE 这通常比使用很多insert语句快20倍左右
下面是mysql 性能优化![](/icons/99993de.gif) 些其它需要注意 地方 大家结合和 充分发挥mysql 性能![](/icons/99993dou2.gif) mysql数据库查询优化 MySQL优化全攻略-相关数据库命令 mysql 数据库中my.ini 优化 2G内存针对站多 抗压型 设置
标签:
相关文章
读者评论
发表评论
|
|