为啥使用 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 太慢了?的主要内容,如果未能解决你的问题,请参考以下文章
多处理返回“打开的文件太多”,但使用 `with...as` 修复它。为啥?