专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » MySQL 数据库优化的具体思路方法介绍说明 »正文

MySQL 数据库优化的具体思路方法介绍说明

来源: 发布时间:星期三, 2010年5月26日 浏览:0次 评论:0
以下文章主要描述是MySQL数据库简单实用优化具体思路方法实现中包括如何定期表进行分析和检查 以及如何正确对表进行定期优化以下就是具体方案描述希望在你今后学习中会有所帮助

1、定期分析表和检查表

分析表语法如下:

复制代码 代码如下:
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name[, tbl_name]...


以上语句用于分析和存储表关键字分布分析结果将可以使得系统得到准确统计信息使得SQL能够生成正确执行计划如果用户感觉实际执行计划并不是预期执行计划执行次分析表可能会解决问题在分析期间使用个读取锁定对表进行锁定这对于MyISAMDBD和InnoDB表有作用

例如分析个数据表

复制代码 代码如下:
analyze table table_name


检查表语法如下:


复制代码 代码如下:
CHECK TABLE tb1_name[,tbl_name]...[option]...option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}


检查表作用是检查个或多个表是否有CHECK TABLE 对MyISAM 和 InnoDB表有作用对于MyISAM表关键字统计数据被更新

CHECK TABLE 也可以检查视图是否有比如在视图定义中被引用表不存在


2. 定期优化表

优化表语法如下:

复制代码 代码如下:
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name [,tbl_name]...


如果删除了表大部分或者如果已经对含有可变长度行表(含有 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表时默认就是先导入数据然后才创建索引索引不用进行设置

复制代码 代码如下:
load data infile '/home/mysql/text_txt' o table text


对于InnoDB类型这种方式不能提高导入数据效率但也有几种针对InnoDB类型表进行优化方式

1. InnoDB类型表式按照主键顺序保存所以将导入数据按照主键顺序排序可以有效提高导入数据效率

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 性能优化些其它需要注意地方大家结合和充分发挥mysql性能
mysql数据库查询优化
MySQL优化全攻略-相关数据库命令
mysql 数据库中my.ini优化 2G内存针对站多 抗压型设置
标签:
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: