首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >管理MySQL常用的统计语句

管理MySQL常用的统计语句

作者头像
数据库交流
发布于 2022-06-15 05:59:46
发布于 2022-06-15 05:59:46
80800
代码可运行
举报
文章被收录于专栏:悦专栏悦专栏
运行总次数:0
代码可运行

这一节内容,整理一些管理 MySQL 会经常用到的统计语句,比如表的碎片率、非 InnoDB 的表、所有用户和所有业务库等。

1 查看所有业务库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select schema_name from information_schema.schemata where schema_name not in ('information_schema','sys','mysql','performance_schema');

注意:

information_schema 中的数据默认不是实时的数据,如果需要实时的数据,需要执行下面命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SET GLOBAL information_schema_stats_expiry=0;

2 批量操作某个前缀的表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select concat('select count(*) from martin.',table_name,';') from information_schema.tables where table_schema='martin' and table_name like 'a_%';

效果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+-------------------------------------------------------+
| concat('select count(*) from martin.',table_name,';') |
+-------------------------------------------------------+
| select count(*) from martin.a_01;                     |
| select count(*) from martin.a_02;                     |
+-------------------------------------------------------+

3 查找业务库中的非 InnoDB 的表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select table_schema,table_name,engine from information_schema.tables  where table_schema not in('information_schema','sys','mysql','performance_schema') and  engine<>'InnoDB';

4 批量构造修改存储引擎的语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select distinct concat('alter table ',table_schema,'.',table_name,' engine=innodb',';') from information_schema.tables where (engine <> 'innodb' and table_schema not in ('information_schema','sys','mysql','performance_schema'));

效果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+-------------------------------------------------------------------------+
| concat('alter table ',table_schema,'.',table_name,' engine=innodb',';') |
+-------------------------------------------------------------------------+
| alter table martin.b_myisam engine=innodb;                              |
+-------------------------------------------------------------------------+
1 row in set (1.53 sec)

5 查看每张表数据量,并按数据量排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select table_schema,table_name, table_rows from information_schema.tables where table_schema not in ('information_schema','sys','mysql','performance_schema') order by table_rows desc;

效果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+--------------+--------------+------------+
| TABLE_SCHEMA | TABLE_NAME   | TABLE_ROWS |
+--------------+--------------+------------+
| martin       | student_info |          8 |
| martin       | a_02         |          2 |
| martin       | a_01         |          0 |
| martin       | b_myisam     |          0 |
+--------------+--------------+------------+
4 rows in set (0.50 sec)

注意:该命令统计的数据量为估值。

6 某个库所有表的字段详情

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select table_schema,table_name,column_name,column_type,collation_name from information_schema.columns  where table_schema='martin';

效果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+--------------+--------------+--------------+-------------------+--------------------+
| TABLE_SCHEMA | TABLE_NAME   | COLUMN_NAME  | COLUMN_TYPE       | COLLATION_NAME     |
+--------------+--------------+--------------+-------------------+--------------------+
| martin       | a_01         | id           | int               | NULL               |
| martin       | a_01         | stu_name     | varchar(10)       | utf8mb4_0900_ai_ci |
| martin       | a_01         | stu_class    | varchar(10)       | utf8mb4_0900_ai_ci |
| martin       | a_01         | stu_num      | int               | NULL               |
......

7 某个库中所有表详情

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select table_schema,table_name,engine,table_collation from information_schema.tables where table_schema='martin';

8 查看某张表的具体信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from information_schema.tables where table_schema='martin' and table_name='student_info'\G

效果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  TABLE_CATALOG: def
   TABLE_SCHEMA: martin
     TABLE_NAME: student_info
     TABLE_TYPE: BASE TABLE
         ENGINE: InnoDB
        VERSION: 10
     ROW_FORMAT: Dynamic
     TABLE_ROWS: 8
 AVG_ROW_LENGTH: 2048
    DATA_LENGTH: 16384
MAX_DATA_LENGTH: 0
   INDEX_LENGTH: 49152
      DATA_FREE: 0
 AUTO_INCREMENT: 13
    CREATE_TIME: 2022-05-05 20:38:21
    UPDATE_TIME: 2022-05-25 01:51:18
     CHECK_TIME: NULL
TABLE_COLLATION: utf8mb4_0900_ai_ci
       CHECKSUM: NULL
 CREATE_OPTIONS: 
  TABLE_COMMENT: 学生信息表
1 row in set (0.46 sec)

9 查看 MySQL 所有用户

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select distinct concat("'",user,'''@''',host,"';") as user from mysql.user;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
效果如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+---------------------------------+
| user                            |
+---------------------------------+
| 'mysql.infoschema'@'localhost'; |
| 'mysql.session'@'localhost';    |
| 'mysql.sys'@'localhost';        |
| 'root'@'localhost';             |
+---------------------------------+
4 rows in set (0.03 sec)

这种结果就很方便执行 show grants,比如下面的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
show grants for 'root'@'localhost';

10 查看某个库所有表的碎片率

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select table_name,data_free / (data_free + data_length + index_length) as aaa,data_free,data_length,index_length from information_schema.tables where table_schema = 'martin' order by aaa desc;

效果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+--------------+--------+-----------+-------------+--------------+
| TABLE_NAME   | aaa    | DATA_FREE | DATA_LENGTH | INDEX_LENGTH |
+--------------+--------+-----------+-------------+--------------+
| a_01         | 0.0000 |         0 |       16384 |        49152 |
| a_02         | 0.0000 |         0 |       16384 |        49152 |
| b_myisam     | 0.0000 |         0 |           0 |         1024 |
| student_info | 0.0000 |         0 |       16384 |        49152 |
+--------------+--------+-----------+-------------+--------------+
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 悦专栏 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【MySQL 系列】冷门 SQL 整理
查看当前链接所有业务数据库 SELECT schema_name AS db_name FROM information_schema.schemata WHERE schema_name NOT IN ( 'information_schema', 'sys', 'mysql', 'performance_schema' ); PS: information_schema 中的数据默认不是实时的数据,如果需要实时的数据,需要执行下面命令: SET GLOBAL information_sch
框架师
2022/09/02
5210
MySQL常用SQL
DBM
2024/04/26
2680
MySQL常用SQL
MySQL上线,检查数据库设计的“十条合规”
MySQL作为关系型数据库的典型代表,在国内环境里经历风雨磨砺,不断地精进,已经在开发和运维方面,成型了一套的规范。这些规范让了解和使用MySQL更加得心应手,并对后期的一些问题起到了很好的预防作用。
数据和云
2021/05/07
1.6K0
数据生命周期管理的初步设计
之前做了一个初版的生命周期设计,导致对于实现的难度低估,在实际设计的时候,碰到了一些意料之外的边界问题。
jeanron100
2019/06/04
8560
数据生命周期管理的初步设计
MySQL ·查看数据库表详情
在 mysql 中,使用 delete 命令删除数据后,会发现这张表的数据文件和索引文件却奇怪的没有变小。这是因为 delete 操作并不会真的把数据删除,mysql 实际上只是给删除的数据打了个标记,标记为删除,因此你使用 delete 删除表中的数据,表文件在磁盘上所占空间不会变小,我们这里暂且称之为假删除。
数媒派
2022/12/01
16.5K0
MySQL8.0​ 字典表增强的意义
MySQL中数据字典是数据库重要的组成部分之一,INFORMATION_SCHEMA首次引入于MySQL 5.0,作为一种从正在运行的MySQL服务器检索元数据的标准兼容方式。用于存储数据元数据、统计信息、以及有关MySQL server的访问信息(例如:数据库名或表名,字段的数据类型和访问权限等)。
MySQL轻松学
2020/06/23
8800
查看MYSQL表数据大小
在MySQL数据库中,有一个内置的database叫做information_schema, 该数据库中的tables表包含了数据库中所有表的基本信息,tables表结构如下:
后场技术
2020/09/03
6.2K0
MySQL:想实现sql语句进行批量删除数据库或表,而引发的熬夜探究
了解到数据库或表的信息都保存在MySQL内置的 information_schema数据库的SCHEMATA表中,因此是否可以通过like查询information_schema中的相关表名,拼接SQL,进行批量删除。
鲲志说
2025/04/07
1920
MySQL:想实现sql语句进行批量删除数据库或表,而引发的熬夜探究
SonarQube 数据清理,从100G 到9G
SonarQube 自去年使用开始,已运行一年有余 它上面的 Project 数量已超过 1000 因为每个应用的每个 git 分支的每次 push 事件都会触发 Sonar 分析任务 这样会有很多的数据都存储下来,从而导致数据量很大 目前 Mysql 数据库占用磁盘空间达到100G 并且随着时间推移会继续增加 于是在想是否可以进行数据清理,以降低所使用的磁盘空间
donghui
2019/07/16
2.8K0
SonarQube 数据清理,从100G 到9G
MOP 系列|MOP 三种主流数据库常用 SQL(二)
MOP 不用多说,指的就是 MySQL、Oracle、PostgreSQL 三种目前最主流的数据库,MOP 系列打算更新 MOP 三种数据库的索引知识、高可用架构及常用 SQL 语句等等,上面已经更新了 MOP 索引相关的文章,今天打算整理一下这三种数据库的常用 SQL 知识,由于文章过长,今天更新中间的一篇之 MySQL 篇。第一篇 Oracle 相关的详见下方链接:MOP 系列|MOP 三种主流数据库常用 SQL(一)。
JiekeXu之路
2024/05/28
1460
MOP 系列|MOP 三种主流数据库常用 SQL(二)
计算MySQL表碎片的SQL整理
当然整理的过程不光是知识梳理的过程,也是转化为实践场景的一个过程,通过这样一个体系,对于整个MySQL对象生命周期管理有了较为深入的认识,这里我来抛砖引玉,来作为深入学习MySQL数据字典的一个入口,这个问题就是:如何较为准确的计算MySQL碎片情况?
jeanron100
2019/09/26
3.2K0
计算MySQL表碎片的SQL整理
[MYSQL] mysql空间问题案例分享
某环境自上线以来, 空间使用越来越多. 总是扩空间也不是办法啊. 于是只能看能不能从数据库层面来释放一部分空间了.
大大刺猬
2025/02/20
2950
[MYSQL] mysql空间问题案例分享
技术分享 | MySQL 巡检
爱可生 DBA 团队成员,负责公司 DMP 产品的运维和客户 MySQL 问题的处理。擅长数据库故障处理。对数据库技术和 python 有着浓厚的兴趣。
爱可生开源社区
2021/06/16
8000
MySQL之表碎片简介
对于mysql和Infobright等数据库,information_schema数据库中的表都是只读的,不能进行更新、删除和插入等操作,也不能加触发器,因为它们实际只是一个视图,不是基本表,没有关联的文件。MySQL的information_schema.tables存储了数据表的元数据信息,它详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。这里我们首先看看information_schame中的表tables的各个字段的含义(代码可左滑):
AsiaYe
2019/11/06
1.3K0
MySQL 案例:表空间碎片
经常使用 MySQL 的话,会发现 MySQL 数据文件的磁盘空间一般会不停的增长,而且有时候删了数据或者插入一批数据的时候,磁盘空间有时候还会毫无变化。引发这个其妙现象的就是 MySQL 的表空间碎片。
王文安@DBA
2021/03/08
5.9K4
MySQL 案例:表空间碎片
sql语句查看MySQL数据库大小
参考链接:http://www.ttlsa.com/mysql/mysql-howto-find-the-database-and-table-size/
保持热爱奔赴山海
2019/09/18
10K0
MYSQL常用SQL汇总
1、查看当前应用连接,连接数突增排查 select user,SUBSTRING_INDEX(host,':',1) as ip , count(*) as count,db from information_schema.processlist where host not in ('localhost') and user not in ('replicater') group by ip order by count; 2、查看表所属及大概行数,一般加字段索引时做参考 select TABLE_SCH
MySQL轻松学
2018/03/09
1.3K0
面试官:MySQL怎么查看表占用空间大小
在mysql中有一个默认的数据表information_schema,information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。
程序员白楠楠
2021/01/20
9.6K0
MySQL 8.0 information_schema系统库的改进
在表的数量很多时,每次查询I_S会从文件系统中读取每个单独的FRM文件,使用更多的CPU周期来打开表并准备相关的内存数据结构
星哥玩云
2022/08/18
5880
MySQL 8.0 information_schema系统库的改进
mysql查询表占用空间大小_oracle查看表空间大小
在mysql中有一个默认的数据表information_schema,information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面,所以请勿删改此表。
全栈程序员站长
2022/10/03
6.1K0
相关推荐
【MySQL 系列】冷门 SQL 整理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档