今天空间商告诉我数据库空间满了,检查了一下,发现网站用户行为记录数据表竟然占了20多MB。积累了半年了,该删除释放一下空间了。果断delete之后发现数据库空间竟然没少,虽然数据记录数是零。

原来这是因为删除操作后在数据文件中留下碎片所致。DELETE只是将数据标识位删除,并没有整理数据文件,当插入新数据后,会再次使用这些被置为删除标识的记录空间。另外实际操作过程中还发现这个问题还存在两种情况。

(1)当DELETE后面跟条件的时候,则就会出现这个问题。如:

delete from table_name where 条件

删除数据后,数据表占用的空间大小不会变。

(2)不跟条件直接delete的时候。如:

delete from table_name

清除了数据,同时数据表的空间也会变为0。

这就存在了一个问题,在网站的实际运行过程中。经常会存在这样的附带条件删除数据的操作行为。天长日久,这不就在数据库中浪费了很多的空间吗。这个时候我们该使用 OPTIMIZE TABLE 指令对表进行优化了。

如何使用 OPTIMIZE 以及在什么时候该使用 OPTIMIZE 指令呢?

命令语法:OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

最简单的:optimize table phpernote_article;

如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用 OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。您可以使用OPTIMIZE TABLE来重新 利用未使用的空间,并整理数据文件的碎片。

在多数的设置中,您根本不需要运行OPTIMIZE TABLE。即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次即可,只对特定的表运行。

OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。

注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。因此,这个操作一定要在网站访问量较少的时间段进行。

TRUNCATE

其语法结构为:

TRUNCATE [TABLE] tbl_name

这里简单的给出个示例,

我想删除 friends 表中所有的记录,可以使用如下语句:

truncate table friends;

delete的效果有点像将mysql表中所有记录一条一条删除到删完,而truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表,这样空间就减下来了。

好了,当然对于我们网站不可能使用truncate table来清除了,因这样之后所有数据都丢失了,这样肯定是不合理的清除了,我们必须使用delete来删除,然后再来修复优化表了哦。

mysql表格字放大_删除MySQL表中内容,表大小反而变大了相关推荐

  1. 如何修改mysql表中列的大小?

    本文翻译自:How can I modify the size of column in a mysql table? I have created a table and accidentally ...

  2. php修改数据库字段为空,为何修改信息后数据库表中内容为空

    为什么修改信息后数据库表中内容为空 套用上一套修改课题的代码写了一个修改信息的代码,但是将内容修改提交后,再查询表中内容发现除了xuehao其他内容为空? //#################### ...

  3. oracle注册表重建,一次Windows 注册表中注册表项目丢失导致的Oracle 数据库启动问题。...

    一次Windows  注册表中注册表项目丢失导致的Oracle 数据库启动问题. 环境说明: 1.windows 2008操作系统 x64bit 2.Oracle database 11.2.0.1 ...

  4. oracle 注册表丢了,一次Windows 注册表中注册表项目丢失导致的Oracle 数据库启动有关问题...

    一次Windows 注册表中注册表项目丢失导致的Oracle 数据库启动问题. 一次Windows  注册表中注册表项目丢失导致的Oracle 数据库启动问题. 环境说明: 1.windows 200 ...

  5. 删除表的mysql命令是什么_删除表的sql命令是什么?

    sql中删除表的命令是DROP TABLE,DROP DATABASE语句用来删除数据库操作,即删除了数据库也删除数据库里的所有表. 命令语法:DROP TABLE "表格名"; ...

  6. mysql shell 所有表_删除mysql数据库中所有表的shell脚本

    分享一个可以删除mysql中所有表的shell脚本,代码如下: 复制代码 代码示例: #!/bin/bash # 删除mysql中所有表 # 示例: # Usage: ./script user pa ...

  7. 如何删除mysql数据库里的表_删除mysql数据表如何操作

    MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TABLE table_na ...

  8. mysql 控制id复原_清空mysql表后,自增id复原

    一.清除mysql表中数据 deletefrom表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以 ...

  9. mysql innodb引擎丢失_【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据...

    注意!此方法只适用于innodb_file_per_table独立表空间的InnoDB实例. 此种方法可以恢复ibdata文件被误删.被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所 ...

  10. mysql连表删除语句_MySQL中联表更新与删除的语法介绍

    前言 相信大家在日常使用mysql,可能会遇到需要同时更新两张表时,我会采用在同一个事务中使用2句sql语句分别进行更新.其实,这种需要发送2句sql语句的方法效率相对来说是比较低的,有没有只用1句s ...

最新文章

  1. 下载最新Android代码的方法
  2. PTA 基础编程题目集 7-18 二分法求多项式单根 C语言
  3. [翻译]StructureMap 指南 – .NET中的依赖注入和控制反转
  4. 用iptable简单的给web服务器做安全
  5. Java并发基本概念
  6. 易驾佳智能机器人教练_学车吗?全智能模拟+车载机器人教练,让你轻松学车...
  7. JVM的进阶学习(GC Roots、JVM调优与参数配置、)
  8. 论文浅尝 | 利用冻结语言模型的多模态少样本学习
  9. 7-5 全量复制和部分复制
  10. wx-jq:一套完全原创的微信小程序插件集合库
  11. 全功能短视频平台去水印解析页面源码
  12. git 上传本地项目到githut中
  13. 支付宝支付原理以及测试接口获取支付url
  14. Helio Protocol — 分布式代币借贷和流动性质押协议
  15. 美团王兴,为什么让骑手注册个体户?详解他的套路,望周知
  16. 跳板机/堡垒机并不安全
  17. UG/NX二次开发 选择坐标系控件 uc1630
  18. 第三章 栈与队列(二)
  19. 研究亥姆霍兹线圈轴线磁场分布
  20. 可爱卡通系小学感恩教师节主题版本PPT模板

热门文章

  1. linux python tab补全_Linux设置python自动tab自动补全
  2. 将json字符串转换成html,根据json字符串生成Html的一种方式
  3. 特斯拉model3中控屏怎么关_对话特斯拉首席设计师Franz:设计为效率服务
  4. pyqt一个text实时显示另一个text的内容_python:基于tkinter打造的股票实时监控声音报警器! 自动监控,声音警报...
  5. 牛客网OI题:序列划分
  6. opencv_判断两张图片是否相同
  7. rust工作台可以拾取吗_10台铝型材工作台一周交货可以吗
  8. php创建目录规则,php创建目录功能
  9. Dropout 丢弃法 动手学深度学习v2 pytorch
  10. 易筋SpringBoot 2.1 | 第三十三篇:SpringBoot Reactor响应式编程实战二 Redis Lettuce