`
uule
  • 浏览: 6351473 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

mysql delete删除记录数据库空间不减少问题解决方法

 
阅读更多

今天空间商告诉我数据库空间满了,检查了一下,发现网站用户行为记录数据表竟然占了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之delete删除记录后数据库大小不变

    在MySQL数据库中,`DELETE`语句用于从数据表中删除特定的记录。然而,有时候在执行`DELETE`操作后,我们可能会注意到数据库文件的大小并没有像预期那样减少,这通常与MySQL的数据存储机制和碎片管理有关。 1. **...

    C#操作mysql数据库

    结合MySQL数据库,我们可以创建高效、稳定的数据存储和管理解决方案。本教程将深入讲解如何使用C#进行MySQL数据库的操作,包括连接、查询、添加、修改和删除数据。 首先,我们需要在C#项目中引入对MySQL的引用。...

    MySql数据库学习记录.zip

    在“MySQL数据库学习记录.zip”这个压缩包中,可能包含了一个人在学习MySQL时积累的各种资料,如笔记、教程、实战项目等。下面我们将深入探讨MySQL数据库的一些关键知识点。 1. **基础概念**: - 数据库:存储和...

    MySQL数据库资源学习基础

    在IT领域,特别是软件开发和数据管理方面,MySQL数据库是一个不可或缺的部分。本文将根据提供的标题“MySQL数据库资源学习基础”及描述“对数据库的一定学习与了解,主要是针对服务器端基础的学习”,深入探讨相关的...

    MySQL数据库工程师常见面试题

    维护阶段则包括监控数据库性能、调整优化策略、备份数据以及解决出现的问题。 #### 问题4:插入记录时可以不指定字段名称吗? 在 SQL 中插入记录时,确实可以不指定字段名称,但这需要满足一定的条件。如果没有...

    某行MySQL数据库开发规范

    ### 某行MySQL数据库开发规范 #### 一、规范的范围和目的 **1.1 规范的范围** 本规范主要涵盖MySQL数据库的SQL语句开发与性能优化、数据库用户及权限管理、数据库日常维护等内容。适用于招联消费金融有限公司内部...

    MySQL删除表数据 MySQL清空表命令 3种方法

    本文将详细介绍三种不同的方法来删除MySQL中的表数据,帮助你更有效地管理数据库。 ### 方法一:TRUNCATE TABLE `TRUNCATE TABLE` 命令是用于快速清空表中所有数据的最直接方式。它不记录单个行的删除,而是将整个...

    完全优化MySQL数据库性能的八大巧方法

    ### 完全优化MySQL数据库性能的八大巧方法 在当今数据驱动的世界中,数据库的性能优化对于确保应用程序的高效运行至关重要。MySQL作为一种广泛使用的开源关系型数据库系统,其性能优化一直是开发者关注的重点。本文...

    mysql数据库保姆教程

    - 删除数据:`DELETE FROM`语句删除指定的记录,如`DELETE FROM students WHERE id = 1;` - 删除表和数据库:`DROP TABLE`和`DROP DATABASE`语句用于删除不再需要的表和数据库。 4. 数据库备份与恢复 - 备份:`...

    处理数据库日志过大问题

    - **事务日志**:在关系型数据库中,如SQL Server或MySQL,事务日志用于记录所有对数据库的更改操作,确保数据一致性并支持事务回滚。 - **归档日志**:在Oracle等数据库中,归档日志保存了已提交事务的历史记录,...

    mysql数据库_MYSQL_

    在SQL(Structured Query Language)语句方面,MySQL支持多种类型的查询,如SELECT用于获取数据,INSERT用于插入记录,UPDATE用于修改已有记录,DELETE用于删除记录。此外,还有CREATE用于创建数据库对象如表、视图...

    MySQL数据库面试宝典1.pdf

    - **Statement-based**:记录执行的SQL语句,这种方式占用空间较少,但可能因为某些语句无法复制而导致问题。 #### 二、数据类型 MySQL支持多种数据类型,包括整数类型、实数类型、字符串类型等。 - **整数类型**...

    MySQL 面试题 (数据库 + MySQL + 面试题 + 准备)

    - `DELETE FROM table_name WHERE condition`: 删除表中的记录。 6. **插入新记录** - `INSERT INTO table_name (column1, column2) VALUES (value1, value2)`: 向表中插入新记录。 #### 高级问题 1. **事务...

    Mysql数据库及可视化工具

    这包括CREATE DATABASE/TABLE用于创建数据库和表,INSERT INTO用于插入数据,SELECT用于查询数据,UPDATE用于更新数据,DELETE用于删除数据,以及JOIN用于连接多个表进行复杂查询。 3. 视图:视图是虚拟表,基于一...

    学生成绩管理系统数据库设计-MySQL.zip

    - DELETE语句用于删除记录。 - JOIN操作用于连接多个表,以获取跨表的数据。 6. 视图: - 视图是虚拟表,根据已存在的表创建,方便用户查看和操作数据。 - 可能会创建视图来展示每个学生的总成绩或平均分,或者...

    mysql 数据库 程序员面试题

    - `DELETE FROM`:删除记录,如`DELETE FROM table_name WHERE condition`。 - `CREATE DATABASE` 和 `USE`:创建和切换数据库。 - `CREATE TABLE`:定义新表结构。 - `ALTER TABLE`:修改表结构。 3. **索引**...

    记录学习MySQL数据库的学习笔记和各种资料.zip

    这份压缩包文件"记录学习MySQL数据库的学习笔记和各种资料.zip"显然包含了一系列与MySQL相关的学习资源,可能是笔记、教程、实战案例等,对于初学者或者希望深入理解MySQL的开发者来说非常有价值。 MySQL的核心知识...

    mysql版数据库操作

    - **DELETE**:删除记录。 - **CREATE**:创建新的表、视图、索引等。 - **ALTER**:修改已存在的表结构。 - **DROP**:删除表、视图、索引等。 4. **表的操作** 表是数据库的基本单元,包括创建表、修改表...

    基于thinkphp的mysql数据库的备份与还原类(好用)

    这个“基于ThinkPHP的MySQL数据库的备份与还原类”为开发者提供了一个便捷的解决方案,允许他们在项目中轻松地实现这两个功能,确保数据的安全性和可恢复性。 首先,我们来理解一下MySQL数据库备份的重要性。数据库...

Global site tag (gtag.js) - Google Analytics