Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Нужно сохранить результат запроса, который затем использовать в нескольких других.
Пример:
Неактивен
Не факт.
Например, если переписать запрос через временную таблицу
Неактивен
оптимизатор на большой `temporary_table` может её проиндексировать во время выполнения запроса
Честно говоря, для меня это что-то новенькое. То есть, MySQL может по своим соображениям построить некий скрытый индекс, даже если ей нигде это явно не указывали?
Неактивен
Это индекс над временной таблицей, которая создана в ходе выполнения запроса, и существует он соответственно тоже только во время выполнения запроса.
В примере выше
https://dev.mysql.com/doc/refman/8.0/en/subquery-materialization.html написал:
Materialization speeds up query execution by generating a subquery result as a temporary table, normally in memory. .. The optimizer may index the table with a hash index to make lookups fast and inexpensive.
В целом: оптимизатор разными способами умеет выполнять подзапросы. Вопрос - умеет ли он применять эти стратегии при работе member of?
Неактивен
строго говоря он индексирует не твою временную таблицу, а свой результат работы с ней
Тогда похоже, что мне самому таблицу создавать не нужно, т.к. MySQL создаст ее сама так, как ей нравится.
Может даже получиться так, что я создам временную таблицу, а MySQL над ней создаст еще одну, если оптимизатор недостаточно умен, чтобы понять, что моя таблица - ровно то, что ему нужно.
Вопрос - умеет ли он применять эти стратегии при работе member of?
Думаю, это зависит от того, что в подзапросе. Если там выбор id, оптимизатор по нему индекс и построит. Либо вообще строить не будет. Но вряд ли он построит неправильный индекс, тем более в данном случае.
Неактивен
Страниц: 1