如何加速 MySQL 上的“显示列”?

mpe*_*pen 8 mysql performance optimization

我的应用程序依赖于为某些表运行“显示列”。运行大约需要 60 毫秒,而我们所有其他查询都需要不到 1 毫秒。information_schema直接查询甚至更慢。

该数据库包含约250个数据库,每个数据库有100到200张表(总共约2万张表)。

  • 我怎样才能找出为什么这些操作这么慢?
  • 也许我可以更改一些设置以使其运行得更快,或者在 SQL 端缓存它?

(该应用程序每页加载执行大约 14 个这样的查询 - 我很清楚需要清理这个遗留代码,但在我进行长期修复时寻找可能的选项。)

Aar*_*own 12

MySQL 为某些访问INFORMATION_SCHEMA表的操作重新计算表统计信息(SHOW COLUMNS只是一个方便的查询别名INFORMATION_SCHEMA.COLUMNS)。将innodb_stats_on_metadata设置为 false,这将防止在您从表中请求元数据时发生这种重新计算。

SET GLOBAL innodb_stats_on_metadata=0;
Run Code Online (Sandbox Code Playgroud)

并将以下内容添加到 my.cnf

[mysqld]
innodb_stats_on_metadata = 0
Run Code Online (Sandbox Code Playgroud)