知识积累:MySQL统计表数据和索引占用空间大小,数据量总行数,清理表空间,case when then 的用法,

1、MySQL统计表数据和索引占用空间大小,数据量总行数


-- 统计数据表占用大小和行数

SELECT

  TABLE_SCHEMA as '数据库',

  TABLE_NAME as '表名',

    (DATA_LENGTH/1024/1024) as '数据大小(Mb)' ,

    (INDEX_LENGTH/1024/1024) as '索引大小(Mb)',

    ((DATA_LENGTH+INDEX_LENGTH)/1024/1024) as '总大小(Mb)',

    TABLE_ROWS as '数据行'

FROM

    information_schema.TABLES order by ((DATA_LENGTH+INDEX_LENGTH)/1024/1024) desc;

执行结果如下:

[图片上传失败...(image-417672-1654825829708)]

2、执行delete数据后空间仍然被占用解决方案


optimize table table_name engine = innodb;

<font color="red">执行以上语句没有效果,表空间并没有释放;</font>

采取重建表方案解决:

log表是我们要清理的表,数据已经执行delete进行删除,单表空间还在占用


-- 新建log1 表结构跟log 相同

create table log1 like log;

-- 将log的表数据插入到log1

insert into log1 select * from log;

-- 重命名,备份log1表为log_bak

alter tables log rename to log_bak;

-- 重命名,将log1表改为log表

alter tables log1 rename to log; 

3、MySQL update更新数据时的 case when then 的用法


update `table`  set

sex = (

case

    when sname in('立立','饭饭')

    then  '女'

    else '男'

end

)

-------------欢迎各位留言交流,如有不正确的地方,请予以指正。【Q:981233589】

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容