mysql数据库碎⽚整理
1、drop table table_name ⽴刻释放磁盘空间,不管是 Innodb和MyISAM 。
2、truncate table table_name ⽴刻释放磁盘空间,不管是 Innodb和MyISAM 。
3、delete from table_name删除表的全部数据,对于MyISAM 会⽴刻释放磁盘空间(应该是做了特别处理,也⽐较合理),InnoDB 不会释放磁盘空间;
4、对于delete from table_name where xxx带条件的删除, 不管是innodb还是MyISAM都不会释放磁盘空间,delete操作以后使⽤optimize table table_name 会⽴刻释放磁盘空间。不管是innodb还是myisam 。所以要想达到释放磁盘空间的⽬的,delete以后执⾏optimize table 操作。例⼦如下:table_name 表名称。
optimize table table_name
6、delete from表以后虽然未释放磁盘空间,但是下次插⼊数据的时候,仍然可以使⽤这部分空间。
总结:
delete from表名;
truncate table 表名;
不带where参数的delete语句可以删除mysql表中所有内容,使⽤truncate table也可以清空mysql表中所有内容。
效率上truncate⽐delete快,但truncate删除后不记录mysql⽇志,不可以恢复数据。
delete的效果有点像将mysql表中所有记录⼀条⼀条删除到删完,
⽽truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。
7、查询所有数据库占⽤磁盘空间⼤⼩的SQL语句:
truncate删除数据
select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size,
concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_size
from information_schema.tables
group by TABLE_SCHEMA
order by data_length desc;
8、查询单个库中所有表磁盘占⽤⼤⼩的SQL语句:
select TABLE_NAME, concat(truncate(data_length/1024/1024,2),' MB') as data_size,
concat(truncate(index_length/1024/1024,2),' MB') as index_size
from information_schema.tables where TABLE_SCHEMA = 'TestDB'
group by TABLE_NAME
order by data_length desc;
9:查询单个库某张表磁盘占⽤⼤⼩的SQL语句
SELECT t.TABLE_SCHEMA,
t.TABLE_NAME,
t.TABLE_ROWS,
t.DATA_LENGTH,
t.INDEX_LENGTH,
t.DATA_FREE,
concat(round(t.DATA_FREE / 1024 / 1024, 2), 'M') AS datafree
FROM information_schema.tables t
WHERE t.TABLE_SCHEMA = 'epay' and t.table_name='orders'

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。