首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么information_schema查询扫描所有数据库?

为什么information_schema查询扫描所有数据库?
EN

Database Administration用户
提问于 2019-04-17 02:00:22
回答 1查看 721关注 0票数 1

我正在构建一个PHP应用程序,它使用information_schema查找所有数据库的最后修改日期。简化的版本如下所示:

代码语言:javascript
复制
$sql = "SELECT update_time FROM information_schema.tables;

我有大约300个数据库,这个循环大约需要3.1秒,所以我想加快速度。我在解释时注意到,information_schema上的任何查询都会扫描所有数据库,所以我猜这就是它速度慢的原因。有办法解决这个问题吗?我正在使用最新的MariaDB 10.3.14。

代码语言:javascript
复制
MariaDB [(none)]> EXPLAIN SELECT update_time FROM information_schema.tables\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: tables
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: NULL
        Extra: Open_full_table; Scanned all databases
1 row in set (0.000 sec)

编辑:我试用了MySQL 8.0,现在循环需要0.03秒。显然这是一个bug,但是MariaDB?https://bugs.mysql.com/bug.php?id=81347有修复吗?

EN

回答 1

Database Administration用户

发布于 2019-04-17 10:16:16

MySQL的原始元数据存储并不理想。它不允许事务性的DDL,它有可靠性问题,而且速度慢而且有问题。创建的问题之一是查询information_schema很慢。

MySQL 8.0在5.6和5.7中完成了一些基础工作,最终摆脱了旧系统(.frms)和那个允许将其迁移到本机系统。,甚至能够为元数据表大大加快速度创建索引。

MariaDB仍然使用旧系统,但是有一些任务(可能会)迁移到一个新系统,类似于MySQL 8:https://jira.mariadb.org/browse/MDEV-11655 (和相关任务)。在MariaDB跟踪器上订阅该任务,或者考虑赞助这项工作。显然,我不知道,但是根据我在MariaDB JIRA上的交互,他们可能希望首先修复这个更大的任务。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/234993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档