解析mysql 表中的碎片产生原因以及清理_php技巧

大量删除数据必然会在数据文件中造成不连续的空白空间,而当插入数据时,这些空白空间则会被利用起来 。
对于不同的存储引擎整理碎片的方式不一样。
myisam
可以有以下方式:
mysql> show table status from test like 'testusers'\G
*************************** 1. row ***************************
  ....
           Rows: 3
 Avg_row_length: 45
         Data_free: 40
.....
因为在中间删除,所以留下了空白
mysql> optimize table testusers;
+----------------+----------+----------+----------+
| Table          | Op       | Msg_type | Msg_text |
+----------------+----------+----------+----------+
| test.testusers | optimize | status   | OK       |
+----------------+----------+----------+----------+
1 row in set (0.00 sec)
mysql> show table status from test like 'testusers'\G
*************************** 1. row ***************************
   ...
           Rows: 3
 Avg_row_length: 32
    Data_length: 96
      Data_free: 0
1 row in set (0.00 sec)
在optimize后,Data_free已经变为0.碎片数据被清除。
同样还可以用以下方式,效果和optimize一样
./bin/mysqlcheck  -uroot -proot --socket=./tmp/mysql.sock  -o test testusers
innodb
对于innodb 使用optimize和mysqlcheck都不起作用,可以如下进行
对于小表的话直接用ALTER TABLE table_name ;回收表空间,对于大表就不能直接采用这种方式,因为会造成长时间的锁表。可以采用新建表转移数据,然后删除旧表的形式,然后再重命名表。

另外有个python可以查看innodb表空间信息,可以在网上找哈,用python写的。

时间: 2024-09-20 06:00:03

解析mysql 表中的碎片产生原因以及清理_php技巧的相关文章

解析在PHP中使用全局变量的几种方法_php技巧

简介即使开发一个新的大型PHP程序,你也不可避免的要使用到全局数据,因为有些数据是需要用到你的代码的不同部分的.一些常见的全局数据有:程序设定类.数据库连接类.用户资料等等.有很多方法能够使这些数据成为全局数据,其中最常用的就是使用"global"关键字申明,稍后在文章中我们会具体的讲解到.使用"global"关键字来申明全局数据的唯一缺点就是它事实上是一种非常差的编程方式,而且经常在其后导致程序中出现更大的问题,因为全局数据把你代码中原本单独的代码段都联系在一起了

mfc 里用addnew()向mysql表中添加记录时有时在前面,有时在后面,求解啊

问题描述 mfc 里用addnew()向mysql表中添加记录时有时在前面,有时在后面,求解啊 mfc 里用addnew()向mysql表中添加记录时有时在前面,有时在后面,求解啊!! 解决方案 直接用SQL语句控制记录. 解决方案二: 文档 数独求解"> 解决方案三: 我是这样插入的

visual studio 2010-vs2010MFC怎样将mysql表中的数据显示的edit控件中

问题描述 vs2010MFC怎样将mysql表中的数据显示的edit控件中 用关键字(比如编号)查询并把表中的数据显示到edit控件中(也就是平时添加时输入数据的) 我想用一个button将数据显示到edit控件里 解决方案 你那样也行. for(r=0;r<mysql_field_count(conn_ptr); r++){ row=mysql_fetch_row(res); if(row<0) break; for(t=0;t<mysql_num_fields(res);t++) p

mapreduce-MapReduce 查询mysql表中的数据,打印记录数,并转储回mysql表

问题描述 MapReduce 查询mysql表中的数据,打印记录数,并转储回mysql表 http://www.hadoop1234.com/?p=230 解决方案 package com.laoxiao.mr02; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.sql.PreparedStatement; import java.sql.ResultSet

jsp 如同将选择题复制到框中,怎么让ABCD选项自动排好,并导入MYSQL表中

问题描述 jsp 如同将选择题复制到框中,怎么让ABCD选项自动排好,并导入MYSQL表中 解决方案 这个用JS处理就可以了. 解决方案二: 字符串截取啊, 字符串从开始截取到A之间的为题目. 截取A到B之间的为A ,然后依此类推.

用shell脚本在mysql表中批量插入数据的方法_linux shell

很多时候需要在mysql表中插入大量测试数据,下面分享一个用shell脚本通过while循环批量生成mysql测试数据的方法,你只需要根据你自己的表结构来生成sql语句即可. 复制代码 代码如下: #!/bin/bash i=1;MAX_INSERT_ROW_COUNT=$1;while [ $i -le $MAX_INSERT_ROW_COUNT ]do    mysql -uroot -proot afs -e "insert into afs_test (name,age,createTi

将数据插入到MySQL表中的详细教程_Mysql

将数据插入到MySQL表,需要使用SQL INSERT INTO命令.可以将数据插入到MySQL表使用mysql>提示符下或使用任何脚本,如PHP.语法: 下面是通用的SQL语法INSERT INTO命令来插入数据到MySQL表: INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); 要插入的字符串数据类型,所有的值需要双或单引号,例如: - "value"

PHP中addcslashes与stripcslashes函数用法分析_php技巧

本文实例分析了PHP中addcslashes与stripcslashes函数用法.分享给大家供大家参考,具体如下: 在写一个网站的英文版时,写完后填加英文资料,我随便填写时一点问题没有,但每当填加指定的内容时却填加不上,也不报错,我查看了数据库,发现这个字段用的是"TEXT"数据数型,我以为是内容过长的原因,于是我把数据类型改成了"longtext",但提交时发现还是出现同样的问题.下面我们给大家介绍一下addcslashes函数吧! 后来请教同事,同事发现在是英文

php+MySql实现登录系统与输出浏览者信息功能_php技巧

本系统,与之前在<ASP 连接Access数据库的登陆系统>(点击打开链接)一文中的asp登录系统的思想完全一样,只是编程语言从asp变成了php,数据库从Access变成了mysql. 一.基本目标 首先在mysql存在着如下的用户信息表: 在页面中有一个登录表单,上面需要用户填写用户名与密码等信息 如果用户输入的用户名在用户信息表里面根本就没有,那么则弹出"查无此人"的对话框,并返回本页 如果用户输入的密码错误,那么则弹出"密码错误"的对话框,并返回