我正在构建一个PHP应用程序,它使用information_schema查找所有数据库的最后修改日期。简化的版本如下所示:
$sql = "SELECT update_time FROM information_schema.tables;我有大约300个数据库,这个循环大约需要3.1秒,所以我想加快速度。我在解释时注意到,information_schema上的任何查询都会扫描所有数据库,所以我猜这就是它速度慢的原因。有办法解决这个问题吗?我正在使用最新的MariaDB 10.3.14。
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有修复吗?
发布于 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上的交互,他们可能希望首先修复这个更大的任务。
https://dba.stackexchange.com/questions/234993
复制相似问题