
База 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';