MySQL的INFORMATION_SCHEMA使用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: MySQL的INFORMATION_SCHEMA使用
--查看创建的索引的CARDINALITY比率
--通常cardinality达到表数据的10%左右建索引会有意义
--如果是一个组合索引,索引第一位的cardinality表示第一个列的cardinality大小,第二列表示第一列和第二列共同的cardinality值
SELECT
    T1.TABLE_SCHEMA,
    T1.TABLE_NAME,
    T2.INDEX_NAME,
    ROUND(T2.CARDINALITY / T1.TABLE_ROWS * 100, 2) AS RATE
FROM
    INFORMATION_SCHEMA.TABLES T1,
    INFORMATION_SCHEMA.STATISTICS T2
WHERE
    T1.TABLE_SCHEMA = T2.TABLE_SCHEMA
        AND T1.TABLE_NAME = T2.TABLE_NAME
        AND T2.SEQ_IN_INDEX = (SELECT
            MIN(T3.SEQ_IN_INDEX)
        FROM
            INFORMATION_SCHEMA.STATISTICS T3
        WHERE
                T2.TABLE_NAME = T3.TABLE_NAME
                AND T2.TABLE_SCHEMA = T3.TABLE_SCHEMA
                AND T2.INDEX_NAME = T3.INDEX_NAME)
AND T1.TABLE_SCHEMA NOT IN ('MYSQL','PERFORMANCE_SCHEMA','INFORMATION_SCHEMA','SYS')
AND T1.TABLE_ROWS >=100
ORDER BY RATE;
--查看锁阻塞
-- 查看锁的SQL
SELECT
    t3.trx_id waiting_trx_id,
    t3.trx_mysql_thread_id waiting_thread,
    t3.trx_query waiting_query,
    t2.trx_id blocking_trx_id,
    t2.trx_mysql_thread_id blocking_thread,
    t2.trx_query blocking_query
FROM
    information_schema.innodb_lock_waits t1,
    information_schema.innodb_trx t2,
    information_schema.innodb_trx t3
WHERE
    t1.blocking_trx_id = t2.trx_id
        AND t1.requesting_trx_id = t3.trx_id;
--查询出哪些表不是InnoDB引擎的
SELECT
    TABLE_SCHEMA,
    TABLE_NAME,
    TABLE_TYPE,
    ENGINE,
    CREATE_TIME,
    UPDATE_TIME,
    TABLE_COLLATION
FROM
    INFORMATION_SCHEMA.TABLES
WHERE
    TABLE_SCHEMA NOT IN ('information_schema' , 'mysql', 'performance_schema', 'sys')
        AND ENGINE <> 'InnoDB';
--生成修改存储引擎的语句
SELECT
    -- TABLE_SCHEMA,
    -- TABLE_NAME,
    -- TABLE_TYPE,
    -- ENGINE,
    -- CREATE_TIME,
    -- UPDATE_TIME,
    -- TABLE_COLLATION,
     CONCAT('alter table ', TABLE_SCHEMA,'.',TABLE_NAME, ' engine=InnoDB;') AS alter_sql
  FROM INFORMATION_SCHEMA.TABLES
 WHERE TABLE_SCHEMA NOT IN
       ('information_schema', 'mysql', 'performance_schema', 'sys')
   AND ENGINE <> 'InnoDB';
--  查看指定数据库的表信息
SET @table_schema='employees';
SELECT
    table_name,
    table_type,
    engine,
    table_rows,
    avg_row_length,
    data_length,
    index_length,
    table_collation,
    create_time
FROM
    information_schema.tables
WHERE
    table_schema = @table_schema
ORDER BY table_name;
-- 查看会话连接信息
SELECT
    THREAD_ID,
    name,
    type,
    PROCESSLIST_ID,
    PROCESSLIST_USER AS user,
    PROCESSLIST_HOST AS host,
    PROCESSLIST_DB AS db,
    PROCESSLIST_COMMAND AS cmd,
    PROCESSLIST_TIME AS time,
    PROCESSLIST_STATE AS state,
    PROCESSLIST_INFO AS info,
    CONNECTION_TYPE AS type,
    THREAD_OS_ID AS os_id
FROM
    performance_schema.threads
WHERE
    type = 'FOREGROUND'
ORDER BY THREAD_ID;
-- CHARACTER_SETS 查看数据库支持的字符集
SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS
WHERE CHARACTER_SET_NAME LIKE 'utf%';
SHOW CHARACTER SET LIKE 'utf%';
-- COLLATIONS  字符序
-- 用于指定数据集如何排序,以及字符串的比对规则
SELECT * FROM INFORMATION_SCHEMA.COLLATIONS
WHERE COLLATION_NAME LIKE 'utf%';
SHOW COLLATION LIKE 'utf%';
-- 查看表结构定义信息
SELECT
    table_name,
    COLUMN_NAME,
    ordinal_position,
    DATA_TYPE,
    IS_NULLABLE,
    COLUMN_DEFAULT,
    column_type,
    column_key,
    character_set_name,
    collation_name
FROM
    INFORMATION_SCHEMA.COLUMNS
WHERE
    table_name = 'employees'
        AND table_schema = 'employees';
show columns from employees from employees;
desc employeees.employees;
-- 查看支持的引擎
SELECT *  FROM INFORMATION_SCHEMA.ENGINES;
show ENGINES;
-- 查看数据库的数据文件信息
SELECT
    FILE_ID,
    FILE_NAME,
    FILE_TYPE,
    TABLESPACE_NAME,
    FREE_EXTENTS,
    TOTAL_EXTENTS,
    ((TOTAL_EXTENTS - FREE_EXTENTS) * EXTENT_SIZE) / 1024 / 1024 AS MB_used,
    EXTENT_SIZE,
    INITIAL_SIZE,
    MAXIMUM_SIZE,
    AUTOEXTEND_SIZE,
    DATA_FREE,
    STATUS,
    ENGINE
FROM
    INFORMATION_SCHEMA.FILES;
-- 查看指定表的约束
SELECT
    constraint_schema,
    table_name,
    constraint_name,
    column_name,
    ordinal_position,
    CONCAT(table_name,
            '.',
            column_name,
            ' -> ',
            referenced_table_name,
            '.',
            referenced_column_name) AS list_of_fks
FROM
    information_schema.KEY_COLUMN_USAGE
WHERE
    REFERENCED_TABLE_SCHEMA = 'employees'
        AND REFERENCED_TABLE_NAME IS NOT NULL
ORDER BY TABLE_NAME , COLUMN_NAME;
-- 查看指定分区表信息
SELECT
    TABLE_SCHEMA,
    table_name,
    partition_name,
    subpartition_name sub_par,
    partition_ordinal_position par_position,
    partition_method method,
    partition_expression expression,
    partition_description description,
    table_rows
FROM
    information_schema.PARTITIONS
WHERE
    table_schema = 'test'
        AND table_name = 't';
-- 查看支持的插件
SELECT
  PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE,
  PLUGIN_LIBRARY, PLUGIN_LICENSE
FROM INFORMATION_SCHEMA.PLUGINS;
SHOW PLUGINS;
-- 查看数据库连接信息
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
SHOW FULL PROCESSLIST;
-- 查看数据库中的存储过程、函数等
SELECT
    ROUTINE_SCHEMA,
    routine_name,
    ROUTINE_TYPE,
    data_type,
    routine_body,
    routine_definition,
    routine_comment
FROM
    INFORMATION_SCHEMA.ROUTINES
WHERE
    ROUTINE_TYPE = 'PROCEDURE'
AND ROUTINE_SCHEMA="employees";
-- 查看存在的数据库及字符集信息
SELECT
    SCHEMA_NAME,
    DEFAULT_CHARACTER_SET_NAME,
    DEFAULT_COLLATION_NAME
FROM
    INFORMATION_SCHEMA.SCHEMATA;
SHOW DATABASES;
-- 查看索引信息
SELECT
    table_schema,
    table_name,
    index_name,
    COLUMN_NAME,
    COLLATION,
    CARDINALITY,
    index_type
FROM
    INFORMATION_SCHEMA.STATISTICS
WHERE
    table_name = 'employees'
        AND table_schema = 'employees';
SHOW INDEX FROM employees FROM employees;
-- 查看数据库大小
SELECT
    table_schema 'database',
    CONCAT(ROUND(SUM(data_length + index_length) / (1024 * 1024),
                    2),
            'M') size
FROM
    information_schema.TABLES
WHERE
    ENGINE in ('MyISAM','InnoDB')
GROUP BY table_schema;
-- 查看表大小
SELECT
CONCAT(table_schema, '.', table_name) table_name,
CONCAT(ROUND(data_length / (1024 * 1024), 2),
'M') data_length,
CONCAT(ROUND(index_length / (1024 * 1024), 2),
'M') index_length,
CONCAT(ROUND(ROUND(data_length + index_length) / (1024 * 1024),
2),
'M') total_size,
engine
FROM
information_schema.TABLES
WHERE
table_schema NOT IN ('information_schema' , 'performance_schema', 'sys', 'mysql')
ORDER BY data_length DESC;
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
MySQL中锁等待超时与information_schema的三个表
MySQL中锁等待超时与information_schema的三个表
46 0
|
存储 关系型数据库 MySQL
MySQL information_schema 系统库介绍
当我们安装好 MySQL 数据库后,会发现数据库实例自带有 information_schema 系统库,你是否有去关注过这个系统库呢?是否有查询过此库中的表数据呢?又是否清楚此库存在的具体作用呢?带着这些疑问,我们一起来看本篇文章。
302 0
MySQL information_schema 系统库介绍
|
关系型数据库 MySQL 数据库
|
监控 关系型数据库 MySQL
|
存储 关系型数据库 MySQL
|
SQL 关系型数据库 MySQL
mysql information_schema 视图信息
information_schema INFORMATION_SCHEMA 是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。 在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表, 你将无法看到与之相关的任何文件 不能在其中插入内容,不能更新它们,也不能删除其中的内容 了解某个表中列信息 select column_n
1543 0
|
2天前
|
存储 关系型数据库 MySQL
关系型数据库MySQL的MyISAM
【6月更文挑战第17天】
21 11