MySQL元数据库——information_schema

本文详细介绍了MySQL中的information_schema数据库,它是元数据库,存储了关于MySQL服务器的数据库、表、字段等元数据信息。内容包括数据库实例与数据库的区别、元数据概念、常见表的解析,如SCHEMATA、TABLES、COLUMNS等,并探讨了是否是表或视图,以及与Oracle的元数据对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平时使用MySQL客户端操作数据库的同学,只要稍微留神都会发现,除了我们建的库之外,还经常看到三个数据库的影子:

1. information_schema
2. performance_schema
3. mysql

这三个数据库究竟是什么东西呢?今天我们好好认识一下MySQL三个火枪手中的information_schema

一、数据库实例和数据库

在认识information_schema前,我们先了解下数据库实例和数据库的区别和联系。我们本地启动MySQL服务,就是启动了一个数据库实例,他首先是一个进程管理了一系列的数据库文件。而我们执行create database cmcc_web 这条SQL语句时,才是真正创建一个数据库,他是一堆表的集合,其实也是文件的集合。简而言之,数据库实例就是RDBMS(数据库管理系统),数据库就是Database,Database是存放数据的仓库,RDBMS就是管理仓库的系统。
在MySQL中,每个schema就是对应一个数据库。这个词将会在下面的篇幅频繁出现。

二、数据库元数据

元(meta),一般被我们翻译成“关于……的……”。元数据(meta data)——“data about data” 关于数据的数据,一般是结构化数据(如存储在数据库里的数据,规定了字段的长度、类型等)。(这段话来源于知乎)。
所以metadata就是描述数据的数据,在MySQL中就是描述database的数据。有哪些数据库、每个表有哪些表、表有多少字段、字段是什么类型等等,这样的数据就是数据库的元数据。

官方定义:

INFORMATION_SCHEMA provides access to database metadata, information about the MySQL server such as the name of a database or table, the data type of a column, or access privileges

综上,我们可以称information_schema是一个元数据库。它就像物业公司的信息库,对管理的每栋大厦有多少电梯、电梯型号、每个房间的长宽高等等了如指掌。

三、常见的表

1、SCHEMATA

### Information Schema 和 Performance Schema 的基本信息 `Information_Schema` 是 MySQL 提供的一个虚拟数据库,主要用于存储有关数据库元数据的信息。这些信息包括表结构、列定义、索引详情以及用户的权限设置等内容[^1]。 例如,可以通过查询 `INFORMATION_SCHEMA.TABLES` 来获取当前数据库中所有的表及其状态。 ```sql SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_database_name'; ``` 相比之下,`Performance_Schema` 则专注于提供 MySQL 服务器运行期间的性能监控数据。它可以记录诸如线程活动、文件 I/O、锁等待等事件,并允许用户分析和优化系统的性能表现[^4]。 为了简化复杂度并提高易用性,MySQL 还引入了一个名为 `sys` 的辅助数据库,该数据库通过预定义好的视图将来自 `information_schema` 和 `performance_schema` 的原始数据进行了封装处理[^2]。这样开发者无需深入理解底层细节即可快速定位潜在瓶颈所在之处。 ### 使用方法对比 #### 查询 Metadata (Information_Schema) 当需要查看某个具体对象比如函数或者触发器是否存在时,则可以利用如下SQL语句来实现: ```sql -- 查看特定模式下的所有存储过程/函数列表 SELECT ROUTINE_NAME ,ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='testdb'; -- 获取某张表格上的外键约束情况 SELECT CONSTRAINT_NAME,COLUMN_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='orders' AND REFERENCED_TABLE_NAME IS NOT NULL; ``` 以上例子展示了如何借助于 `INFORMATION_SCHEMA` 中的相关视图表去检索不同类型的元数据条目。 #### 性能调优工具(Performance_Schema) 另一方面,在排查缓慢查询原因方面,我们可以依靠 `PERFORMANCE_SCHEMA` 所暴露出来的接口来进行深层次挖掘: ```sql -- 显示最近一段时间内的最耗时 SQL 请求 SELECT DIGEST_TEXT AS query, COUNT_STAR AS exec_count,TOTAL_TIMER_WAIT AS total_latency FROM performance_schema.events_statements_summary_by_digest ORDER BY TOTAL_TIMER_WAIT DESC LIMIT 5; -- 统计各阶段花费的时间百分比分布状况 SELECT EVENT_NAME,SUM(TIMER_WAIT)/SUM(SUM(TIMER_WAIT)) OVER () * 100 AS pct_time_spent FROM performance_schema.events_waits_summary_global_by_event_name GROUP BY EVENT_NAME HAVING SUM(TIMER_WAIT)>0 ORDER BY pct_time_spent DESC ; ``` 上述脚本片段能够帮助我们识别哪些操作占据了主要时间开销,从而为进一步改进奠定基础。 ### 主要差异点总结 | 方面 | Information_Schema | Performance_Schema | |--------------------|-----------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------| | **功能侧重** | 存储数据库元数据,如表结构、列属性、字符集等 | 记录 MySQL 实际运行过程中产生的各种性能指标 | | **适用场景** | 数据字典查阅;动态发现现有资源 | 故障排除;性能评估 | | **初始化成本** | 自动创建完成 | 需要在配置文件my.cnf里启用选项performance-schema=ON | 尽管两者都属于只读性质的数据源,但它们各自扮演的角色却截然不同——前者更像是一个静态的知识库,而后者则充当实时反馈机制的一部分[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值