Теперь ты видел все
Месси и Икарди теперь одноклубники. Шептались, что Мауро пропустил ЧМ-2018 из-за Лео, но сейчас у них все отлично
История загадочных отношений.
Переход Лео Месси в «ПСЖ» побудил еще пристальнее следить за положением Мауро Икарди: никто не забыл об истории с участием Ванды Нары и Макси Лопеса. В октябре 2016-го шоу Final Debate взорвало медиапространство громким инсайдом: Месси якобы попросил тренера Эдгардо Баусу не вызывать Икарди в сборную Аргентины из-за того, что Икарди увел у Лопеса жену.
Бауса, конечно, утаивал это: «Ни Маскерано, ни Месси, ни кто-либо еще никогда не влияли на то, кого я вызывал в команду или ставил в состав. Я встречался с Икарди и знал, что в любое время могу вызвать его. Никто никогда мне говорил что-либо о нем или о ком-то еще. Ни у кого из футболистов не было разногласий с Мауро».
Возможно, но к 28 годам у Икарди накопилось всего 8 матчей за сборную (последний – в ноябре 2018-го). И это у форварда со 121 голом в 219 матчах за «Интер», который перед ЧМ-2018 забил 29 мячей в 34 играх Серии А. Даже таких успехов оказалось недостаточно – на турнир поехали Гонсало Игуаин, Пауло Дибала, Серхио Агуэро.
Как все-таки развивались отношения Месси и Икарди?
Одна запись — несколько полей
Возьмем простую и достаточно типовую бизнес-задачу — показать последний документ по каждому из некоторого набора покупателей:
Для каждого клиента мы хотим иметь в результате исполнения запроса все значимые поля этого «последнего» документа. Что ж, «как слышится, так и пишется»:
И. мы героически вытаскиваем одну и ту же запись из таблицы трижды! [посмотреть на explain.tensor.ru]
Троекратное «ура!» разработчику от сервера
Возврат целой записи таблицы
И вот зачем мы каждое поле отдельно ищем? Мало того, что это раздувает размер запроса, так еще и выполняется каждый раз заново!
Давайте вернем из вложенного запроса сразу всю запись (только id мы теперь не будем переименовывать, чтобы не получилось два customer_id в результате):
И. теперь вместо 3 циклов у нас стало 4 — по одному на каждое поле извлекаемой вложенным запросом записи, включая customer_id (причем Index Only Scan , когда dt можно было вернуть прямо из индекса, превратился в менее эффективный, зато полностью совпадающий с остальными, Index Scan ):
Экранируем запись с помощью CTE
И, если вы используете версию PostgreSQL ниже 12-й, то все отлично — теперь индекс сканируется однократно (точнее, 7 раз вместо 28):
А вот начиная с PostgreSQL 12, планировщик «разворачивает» содержимое CTE, сводя все к тому же плану с 4 SubPlan . И чтобы он этого не делал, а наш «хак» продолжил работать, для CTE необходимо указать ключевое слово MATERIALIZED :
Незаслуженно забываемый LATERAL
Глядя на все больше обрастающий «хаками» и становящийся менее читабельным код, невольно возникает вопрос — неужели нельзя как-то попроще?
И такой способ есть — это LATERAL -подзапрос, выполняющийся отдельно для каждой записи выборки, собранной на предыдущих шагах (в нашем случае это набор из 7 строк id ):
Обратите внимание на комбинацию LEFT JOIN LATERAL . ON TRUE — это неизбежная плата, если мы хотим обязательно получить запись по каждому из 7 наших id , когда документов по конкретному покупателю нет совсем.
Вот что LATERAL животворящий делает!
Такой запрос не только ищет запись однократно, но еще и в 1.5 раза быстрее из-за отсутствия необходимости формировать и читать CTE!
Поиск по фотографиям
Приложение «Фото» упрощает поиск фотографий определенного человека, места, предмета или события. Коснитесь вкладки «Поиск» и введите то, что вы ищете, в строке поиска.
- Моменты: находите события, например посещенный концерт или вашу поездку. Для поиска подходящих фотографий в приложении «Фото» используются время и местоположение ваших фотографий, а также данные о событиях в Интернете.
- Люди: находите в своей медиатеке фотографии определенных людей или групп людей. Главное поддерживать упорядочение имен и лиц в своем альбоме «Люди».
- Места: просматривайте все свои фотографии и видео на карте в разделе «Места». Или введите название места в строке поиска для просмотра фотографий и видео из памятного места.
- Категории: приложение «Фото» распознают сцены, объекты и типы мест. Выполните поиск по запросу, например «озеро», затем выберите результат, чтобы просмотреть подходящие фотографии.
Вкладка «Поиск» также предлагает моменты, людей, места, категории и группы для поиска. Нажмите предложенный вариант поиска, например «один год назад» или «животные», чтобы посмотреть свои фотографии.
При поиске фотографий операции по распознаванию лиц и обнаружению сцен и объектов выполняются исключительно на вашем устройстве. Дополнительная информация о фотографиях и конфиденциальности.