mysql optimize innodb 优化详解

如果对mysql表,进行大范围删除后,最好做一个表优化,这样会快一些。以前写过一篇类似的,针对myisam存储引擎的。请参考:实例说明optimize table在优化mysql时很重要

1,删除数据,并尝试优化

mysql> delete FROM `test` WHERE d_id>397136; 
Query OK, 306356 rows affected (19.48 sec) 
 
mysql> optimize table test; 
+------------+----------+----------+-------------------------------------------------------------------+ 
| Table      | Op       | Msg_type | Msg_text                                                          | 
+------------+----------+----------+-------------------------------------------------------------------+ 
| test1.test | optimize | note     | Table does not support optimize, doing recreate + analyze instead | 
| test1.test | optimize | status   | OK                                                                | 
+------------+----------+----------+-------------------------------------------------------------------+ 
2 rows in set (0.35 sec) 
执行optimize的时候,非常慢,可能会卡死。msg_text信息的意思是innodb引擎,不支持optimize。在官网找了一下,发现以下内空
Table does not support optimize, doing recreate + analyze instead.
It is because the table that you are using is InnoDB.
You can optimize the InnoDB tables by using this.
ALTER TABLE table.name ENGINE='InnoDB';

一般情况下,由myisam转成innodb,会用alter table table.name engine='innodb'进行转换,优化也可以用这个

2,alter优化数据

mysql> alter table test engine='innodb'; 
Query OK, 384781 rows affected (19.88 sec) 
Records: 384781  Duplicates: 0  Warnings: 0 
alter如果很慢,优化一下my.cnf,[mysqld]加上以下内容,并重新加载。
innodb_buffer_pool_size=1G 
innodb_file_io_threads=4 
innodb_file_io_threads常规配置,小于等CPU核数。innodb_buffer_pool_size小于等于物理内存的1/2,原则上够用就好。

3,优化后的对比

mysql> use information_schema 
 
mysql> select concat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB, 
 -> concat(round(sum(index_length/1024/1024),2),'MB') as index_length_MB 
 -> from tables where 
 -> table_schema='test1' 
 -> and table_name = 'test'; 
+----------------+-----------------+ 
| data_length_MB | index_length_MB | 
+----------------+-----------------+ 
| 20.55MB        | 27.55MB         |       //优化前 
+----------------+-----------------+ 
1 row in set (0.01 sec) 
 
mysql> select concat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB, 
 -> concat(round(sum(index_length/1024/1024),2),'MB') as index_length_MB 
 -> from tables where 
 -> table_schema='test1' 
 -> and table_name = 'test'; 
+----------------+-----------------+ 
| data_length_MB | index_length_MB | 
+----------------+-----------------+ 
| 20.55MB        | 16.55MB         |    //优化后 
+----------------+-----------------+ 
1 row in set (0.00 sec) 
data_length_MB,第一列是数据;index_length_MB,第二列是索引

时间: 2024-09-22 09:17:15

mysql optimize innodb 优化详解的相关文章

mysql limit 分页优化详解

实现分页,我们一般会使用 select * from table   where id >100  limit   a,b   ,  当分页过大时,如达到一万页,此时 a =十万 ,b=10,   虽然此处使用到了索引(不用索引情况会更加糟糕),但是通过索引检索后还是需要回表去取 十万零一十条数据  然后丢掉前十万条, 返回十条,这个代价明显太大了.   通常的解决方法是,限制总页数,因为通过没有用户会对一万页后的数据感兴趣,当然也可以通过coreseek sphinx 等实现   当然也可以通

MySQL my.cnf参数配置优化详解

MySQL my.cnf参数配置优化详解 本配置文件针对Dell R710,双至强E5620.16G内存的硬件配置.CentOS 5.6 64位系统,MySQL 5.5.x 稳定版.适用于日IP 50-100w,PV 100-300w的站点,主要使用InnoDB存储引擎.其他应用环境请根据实际情况来设置优化. 注:你的MySQL 版本可能和这里用的不同,所以有些参数会废弃,有些被替代,当发现启动异常或者使用异常时,请取消某些配置. # 客户端 # 以下选项会被MySQL客户端应用读取.注意只有M

Mysql my.ini 配置文件详解_Mysql

Mysql my.ini 配置文件详解 #BEGIN CONFIG INFO #DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大 #TYPE: SYSTEM #END CONFIG INFO # # 此mysql配置文件例子针对4G内存 # 主要使用INNODB #处理复杂队列并且连接数量较少的mysql服务器 # # 将此文件复制到/etc/my.cnf 作为全局设置, # mysql-data-dir/my.cnf 作为服务器指定设置 # (@loc

Spring整合MyBatis(Maven+MySQL)图文教程详解_java

一. 使用Maven创建一个Web项目 为了完成Spring4.x与MyBatis3.X的整合更加顺利,先回顾在Maven环境下创建Web项目并使用MyBatis3.X,第一.二点内容多数是回顾过去的内容 . 1.2.点击"File"->"New"->"Other"->输入"Maven",新建一个"Maven Project",如下图所示: 1.2.请勾选"Create a si

Mysql Limit 分页查询优化详解_Mysql

select * from table LIMIT 5,10; #返回第6-15行数据 select * from table LIMIT 5; #返回前5行 select * from table LIMIT 0,5; #返回前5行 我们来写分页 物理分页 select * from table LIMIT (当前页-1)*每页显示条数,每页显示条数; MySQL之Limit简单优化.md 同样是取90000条后100条记录,传统方式还是改造方式? 传统方式是先取了前90001条记录,取其中最

PHP4与MySQL数据库操作函数详解

mysql|函数|数据|数据库|详解 说PHP就不能不提MySQL,而要讲MySQL,那么PHP也是必然要被提起.PHP的迅速崛起,离不开MySQL,而MySQL的广泛应用,也与PHP休戚相关. 下面详细分析PHP4中与MySQL相关操作的函数(共32个,开头都为mysql_): <1>. 连接数据库服务器(database server)的函数(2个): (1).mysql_connect() 格式:int mysql_connect(string [hostname] [:port],st

MySQL常用时间函数详解(推荐)_Mysql

2.6 DATE_SUB/DATE_ADD DATE_SUB(date,INTERVAL expr type) date 参数是合法的日期表达式.expr 参数是您希望添加的时间间隔. SELECT id FROM my_table WHERE create_time >= date_sub(now(), INTERVAL 3 HOUR) AND create_time < now(); Type 值 •MICROSECOND •SECOND •MINUTE •HOUR •DAY •WEEK

MySQL常用聚合函数详解_Mysql

一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回指定列的最大值 四.SUM SUM(col) 返回指定列的所有值之和 五.GROUP_CONCAT GROUP_CONCAT([DISTINCT] expr [,expr ...]              [ORDER BY {unsigned_integer | col_name | expr}

php mysql insert into 结合详解及实例代码_Mysql

php mysql insert into 结合详解 ySQL INSERT INTO语句在实际应用中是经常使用到的语句,所以对其相关的内容还是多多掌握为好. 向数据库表插入数据 INSERT INTO 语句用于向数据库表添加新记录. 语法 INSERT INTO table_name VALUES (value1, value2,....) 您还可以规定希望在其中插入数据的列: INSERT INTO table_name (column1, column2,...) VALUES (valu