Задавайте вопросы, мы ответим
Вы не зашли.
На сайте появилась новая статья Группировка в MySQL. Буду благодарен за замечания и предложения.
to rgbeast
каждое выполнение подзапроса требует определенных накладных расходов, которые можно увидеть путем профилирования
Из профайлинга мы можем увидеть, что подзапрос выполняется много раз, что логично так как он зависимый. Однако, отсюда не очевидна природа задержки. Имхо, формулировка про sql-обертку была лучше.
Неактивен
Про SQL-обертку звучит лучше, но это не совсем верно. План исполнения подзапроса формируется один раз, а накладные расходы не из-за SQL, а из-за того, что требуется начать исполнение подзапроса, а после его завершения сохранить результат. Это отлично видно из профайлинга:
...
optimizing
statistics
preparing
executing
Sending data
executing
Sending data
executing
Sending data
executing
Sending data
executing
Sending data
executing
Sending data
executing
Sending data
executing
Sending data
...
В случае JOIN вызов исполнителя (executor) не производится, ровно как и передача данных.
Неактивен
Согласен, твоя формулировка точнее.
Просто, когда JOIN сканирует вторую таблицу, это похоже на подзапрос. Но JOIN мы вызвали единожды и дальше он бегает вложенными циклами по таблицам, т.е. работа идет на уровне внутреннего алгоритма. А в случае подзапроса хоть план выполнения и составляется единожды есть дополнительные расходы (инициализация кода, вызов методов, передача результата и т.д), связанные с тем, что подзапрос трактуется как отдельный sql-запрос. Эта ситуация у меня хорошо ассоциируется с фразой про SQL-обертку, которая зажирает время
Но термин ни разу не общепринятый, и наверняка, у других людей вызывает иные ассоциации.
P.S. Кстати, у яндекса классный логотип ко дню студента, прям ностальгией повеяло.
Неактивен