mysql碎片整理方法

标签: mysql 碎片 方法 | 发表时间:2015-11-10 11:55 | 作者:daizj
出处:http://www.iteye.com

  对于一个表如果经常插入数据和删除数据,则会产生很多不连续的碎片,这样久而久之,这个表就会占用很大空间,但实际上表里面的记录数却很少,这样不但会浪费空间,并且查询速度也更慢,因此为了解决这个问题,可以有心下解决方案

 

1、myisam存储引擎清理碎片方法

 

  OPTIMIZE TABLE  table_name 

 

2、innodb存储引擎清理碎片方法

 

ALTER TABLE tablename ENGINE=InnoDB

 

 

3、查看表碎片的方法

 

mysql> select ROW_FORMAT,TABLE_ROWS,DATA_LENGTH,INDEX_LENGTH,MAX_DATA_LENGTH,DATA_FREE,ENGINE from TABLES where TABLE_SCHEMA='test_db' and TABLE_NAME='test_table' limit 1;

+------------+------------+-------------+--------------+-----------------+------------+--------+

| ROW_FORMAT | TABLE_ROWS | DATA_LENGTH | INDEX_LENGTH | MAX_DATA_LENGTH | DATA_FREE  | ENGINE |

+------------+------------+-------------+--------------+-----------------+------------+--------+

| Dynamic    |    2250014 |  4042158980 |   2338186240 | 281474976710655 | 3901819476 | MyISAM | 

+------------+------------+-------------+--------------+-----------------+------------+--------+

 

1 row in set (0.00 sec)

 

从上面的DATA_FREE字段可以看出碎片空间很大

 

Engine不同,OPTIMIZE 的操作也不一样的,MyISAM 因为索引和数据是分开的,所以 OPTIMIZE 可以整理数据文件,并重排索引.

 

OPTIMIZE 操作会暂时锁住表,而且数据量越大,耗费的时间也越长,它毕竟不是简单查询操作.所以把 Optimize 命令放在程序中是不妥当的,不管设置的命中率多低,当访问量增大的时候,整体命中率也会上升,这样肯定会对程序的运行效率造成很大影响.比较好的方式就是做个shell,定期检查mysql中 `information_schema`.`TABLES`字段,查看 DATA_FREE 字段,大于0话,就表示有碎片

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [mysql 碎片 方法] 推荐:

mysql碎片整理方法

- - 数据库 - ITeye博客
  对于一个表如果经常插入数据和删除数据,则会产生很多不连续的碎片,这样久而久之,这个表就会占用很大空间,但实际上表里面的记录数却很少,这样不但会浪费空间,并且查询速度也更慢,因此为了解决这个问题,可以有心下解决方案. 1、myisam存储引擎清理碎片方法. 2、innodb存储引擎清理碎片方法. 从上面的DATA_FREE字段可以看出碎片空间很大.

mysql优化方法

- - 数据库 - ITeye博客
通过show status和应用特点了解各种SQL的执行频率. 通过SHOW STATUS可以提供服务器状态信息,也可以使用mysqladmin extended-status命令获得. SHOW STATUS可以根据需要显示session级别的统计结果和global级别的统计结果. 以下几个参数对Myisam和Innodb存储引擎都计数:.

mysql的table is read only 解决方法

- - CSDN博客系统运维推荐文章
今天,在centos6下把mysql没法启动的数据库文件夹复制到/usr/local/mysql/var下,结果在修改表时,提示”table isreadonly”的错误. 首先想到的是遇到了权限问题,所以就去/usr/local/mysql/var查看了下,果然所有者不是mysql,权限也不正确.

MySQL 快速複製 Table 的方法

- - Tsung's Blog
MySQL 要複製 整個 Table, 要怎麼做呢?. MySQL 快速複製 Table 的方法. 以下範例都是把 old_table 複製到 new_table.. 先講講結論, 最推薦的作法是下述兩行:. 以下來講講幾種作法 和 優缺點.. MyISAM 的作法若比較暴力點的話, 可以用下述方式做:.

測試 MySQL 效能的方法

- - Gea-Suan Lin's BLOG
在 DigitalOcean 上的教學文章看到另外一種 MySQL 效能測試的方法:「 How To Measure MySQL Query Performance with mysqlslap」. 一般會拿 Percona 的 tpcc-mysql 測,用 mysqlslap 好像比較少看到,雖然也是蠻有名的工具….

mysql text 字段过多解决方法

- - 非技术 - ITeye博客
表类型: innodb, row_format=compact (这是默认的行格式). 插入超过10个blob, blob的数据量很小(<768字节), 插入成功. 插入超过10个blob, blob的数据量很大(>768字节), 插入失败:报 Got error 139 from storage engine.

windows下mysql忘记root密码的解决方法

- - 开源软件 - ITeye博客
1、在DOS窗口下输入net stop mysql5 或 net stop mysql. 2、开一个DOS窗口,这个需要切换到mysql的bin目录. 一般在bin目录里面创建一个批处理1.bat,内容是cmd.exe运行一下即可就切换到当前目录,然后输入. 3、再开一个DOS窗口,mysql -u root.

保障MySQL安全的14个最佳方法

- - ITeye博客
MySQL数据库一贯以高性能、高可性和易用性著称,它已经成为世界上最流行的开源数据库. 大量的个人、WEB开发者、大型公司等都在其网站、关键系统、软件包中广泛使用MySQL数据库. 通常,许多企业在部署一种产品时,安全性常常得不到应有的重视. 企业最关心的是使其可以尽快地运行,企业由此也可以尽快赢利.

关于mysql大数据分页的一些方法。

- - CSDN博客编程语言推荐文章
select * from user  limit 0,10;   这种最普通的方法在数据量不大的时候是没问题的. 当数据量大于100W的时候 ,就要 select * from user limit 1000000,10 ;  此时数据库. 要先扫过前面的100W条记录,再来取10条,所以当数据量越来越大的时候,速度也会越来越慢.

查看mysql语句运行时间的2种方法

- - 数据库 - ITeye博客
网站运行很慢的时候,我就特别起知道为什么这么慢,所以我查啊查,数据库绝对是很重要的一部分,里面运行的sql是绝对不能放过的. 平时做项目的时候,我也会注意sql语句的书写,写出一些高效的sql来,所以我会经常测试自己写的sql语句. 我把我知道的二个方法,总结一下发出来. 一,show profiles 之类的语句来查看.