为啥使用 information_schema 太慢了?

Posted

技术标签:

【中文标题】为啥使用 information_schema 太慢了?【英文标题】:Why is using information_schema too much slow?为什么使用 information_schema 太慢了? 【发布时间】:2017-02-26 07:34:33 【问题描述】:

这是我的代码:

// dbs size
$sql = 'SELECT table_schema DB_Name,
               Round(Sum(data_length + index_length) / 1024 / 1024, 2) DB_Size_in_MB
        FROM  information_schema.tables
        GROUP BY table_schema';
$dbs_size = DB::select($sql);

执行上述查询需要 6 秒。为什么?我怎样才能让它更快?

【问题讨论】:

你的服务器慢吗?是否承受重负载?其他查询需要这么长时间吗? 我觉得是环境问题,不是查询问题 @tadman 是的。我使用的服务器有点忙。但我仍然认为执行该查询的速度很慢。 @GurV 好吧。谢谢 计算表大小可能需要尘埃落定在飞行中的查询上,这可能需要一些时间。 【参考方案1】:

不幸的是,访问 INFORMATION_SCHEMA.TABLES 的速度非常慢,尤其是当您有很多表时,因为服务器必须打开每个文件才能满足查询。

您可以在此博客文章中找到有关如何加快对 information_schema 的查询的更多信息: https://www.percona.com/blog/2011/12/23/solving-information_schema-slowness/

希望对你有帮助!

【讨论】:

8.0 也会加快速度。

以上是关于为啥使用 information_schema 太慢了?的主要内容,如果未能解决你的问题,请参考以下文章

为啥混合不使用太多 OTP?

为啥Java飞行记录仪采样太少?

为啥我的图像对于 iPhone 来说太大了

多处理返回“打开的文件太多”,但使用 `with...as` 修复它。为啥?

为啥使用通配符将参数数量减半会因“参数列表太长”而失败? [复制]

SQL Server:我应该在 sys 表上使用 information_schema 表吗?