Полезные запросы к базе information_schema MySQL

База information_schema содержит много полезной информации. Ниже парочка полезных запросов, которые немного помогают в оптимизации.

  • Поиск таблиц с одинаковыми ключами
  • 10 самых объемных таблиц
  • Таблицы без первичного ключа


1. Ищем таблицы с одинаковыми ключами:
SELECT * FROM (
SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_NAME,
GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) AS columns, NON_UNIQUE
FROM `information_schema`.`STATISTICS`
WHERE TABLE_SCHEMA NOT IN ('mysql', 'INFORMATION_SCHEMA')
AND INDEX_TYPE='BTREE'
GROUP BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME
) AS i1 INNER JOIN (
SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_NAME,
GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) AS columns, NON_UNIQUE
FROM `information_schema`.`STATISTICS`
WHERE INDEX_TYPE='BTREE'
GROUP BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME
) AS i2
USING (TABLE_SCHEMA, TABLE_NAME)
WHERE i1.columns = i2.columns AND i1.NON_UNIQUE = i2.NON_UNIQUE
AND i1.INDEX_NAME < i2.INDEX_NAME

Такой же функционал предоставляет утилита mk-duplicate-key-checker из библиотеки maatkit .

2. 10 самых объемных таблиц:
SELECT concat(table_schema,'.',table_name) table_name, data_length
FROM information_schema.TABLES
ORDER BY data_length DESC LIMIT 10;

3. Таблицы без первичного ключа:
SELECT CONCAT(t.table_name,".",t.table_schema) as table_name
FROM information_schema.TABLES t
LEFT JOIN information_schema.TABLE_CONSTRAINTS tc ON t.table_schema = tc.table_schema
AND t.table_name = tc.table_name
AND tc.constraint_type = 'PRIMARY KEY'
WHERE tc.constraint_name IS NULL AND t.table_type = 'BASE TABLE';

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий