Как правило, следует избегать запуска подзапросов в SELECT
, если коррелированные подзапросы не нужны И у вас нет поддержки оконных функций (доступно в MySQL 8+). Поэтому переместите подзапрос в JOIN
в качестве производной таблицы и для включения количества строк просто запустите JOIN INFORMATION_SCHEMA.TABLES
:
SELECT DISTINCT c.TABLE_SCHEMA, c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE,
t.CONSTRAINT_TYPE, NULL AS DATA_PRECISION,
NULL AS DATA_SCALE, r.TABLE_ROWS
FROM INFORMATION_SCHEMA.COLUMNS c
INNER JOIN (
SELECT DISTINCT kcu.TABLE_NAME, kcu.COLUMN_NAME, p.CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS p
ON p.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
AND p.CONSTRAINT_TYPE = \'PRIMARY KEY\'
) AS t
ON t.TABLE_NAME = c.TABLE_NAME
AND t.COLUMN_NAME = c.COLUMN_NAME
INNER JOIN INFORMATION_SCHEMA.TABLES r
ON r.TABLE_NAME = c.TABLE_NAME
AND r.TABLE_SCHEMA = c.TABLE_SCHEMA