MySQL Оптимизация запроса INFORMATION_SCHEMA - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть 20 000 столбцов в моей базе данных, и очень часто делается запрос для перечисления всех столбцов определенного c шаблона имени таблицы:

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE 'pattern_%' AND TABLE_SCHEMA = 'my-db-name'

Обычно это делается быстро, но иногда требуется некоторое время (до 10 секунд, я видел один раз).

Чтобы оптимизировать его, я подумал сделать индекс на INFORMATION_SCHEMA, однако, как я понимаю, это представление, и я могу ' t создать индекс для?

ALTER TABLE `INFORMATION_SCHEMA`.`COLUMNS` ADD INDEX `table_name__table_schema` ( `TABLE_NAME` , `TABLE_SCHEMA` )

1044 - Отказано в доступе для пользователя 'root' @ '%' к базе данных 'information_schema'

Есть 40 "шаблоны" в целом, которые я часто использую.

Есть ли способ оптимизации таким образом, чтобы этот запрос был максимально быстрым?

Объяснение запроса: enter image description here

1 Ответ

0 голосов
/ 12 апреля 2020

Создайте материализованное представление, когда материализованное представление будет сохранено, следовательно, вы сможете создать индекс для него. Ниже приведена ссылка на синтаксис материализованного представления в mysql.

Материализованное представление в mysql

Хотя я удивляюсь, почему вы говорите, что иногда опаздывает, иногда быстро, разве вы не думаете, что чем больше данных, тем больше времени. Представление никогда не хранится правильно, но представление по-прежнему выбирает несколько или все столбцы из таблицы. Вы пробовали иметь индекс для всех уникальных столбцов таблиц, поскольку представление обращается к столбцам самой таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...