分析表的语法以下:html
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name[, tbl_name]...
以上语句用于分析和存储表的关键字分布,分析的结果将可使得系统获得准确的统计信息,使得SQL可以生成正确的执行计划。若是用户感受实际执行计划并非预期的执行计划,执行一次分析表可能会解决问题。在分析期间,使用一个读取锁定对表进行锁定。这对于MyISAM,DBD和InnoDB表有做用。mysql
例如分析一个数据表sql
analyze table table_name
检查表的语法以下:数据库
CHECK TABLE tb1_name[,tbl_name]...[option]...option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
检查表的做用是检查一个或多个表是否有错误,CHECK TABLE 对MyISAM 和 InnoDB表有做用,对于MyISAM表,关键字统计数据被更新性能优化
CHECK TABLE 也能够检查视图是否有错误,好比在视图定义中被引用的表不存在。性能
优化表的语法以下:优化
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name [,tbl_name]...
若是删除了表的一大部分,或者若是已经对含有可变长度行的表(含有 VARCHAR、BLOB或TEXT列的表)进行更多更改,则应使用OPTIMIZE TABLE命令来进行表优化。这个命令能够将表中的空间碎片进行合并,而且能够消除因为删除或者更新形成的空间浪费,但OPTIMIZE TABLE 命令只对MyISAM、 BDB 和InnoDB表起做用。code
例如: optimize table table_nameorm
注意: analyze、check、optimize执行期间将对表进行锁定,所以必定注意要在MySQL数据库不繁忙的时候执行相关的操做。htm
咱们在开发的时候经常用到的SQL语句,无非是INSERT、GROUPBY等等。对于这些SQL语句,咱们怎么进行优化?
1. 大批量插入数据
代码以下:
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' into 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 into test values(1,2) insert into test values(3,4) insert into test values(5,6)
将上面三句改成:insert into 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的性能。