SQL optimization. Join против In и Exists. Что использовать?

Опубликовано: 21.10.2017

«Раньше было проще» — Подумал я, садясь за оптимизацию очередного запроса в SQL management studio. Когда я писал под MySQL, реально все было проще — или работает, или нет. Или тормозит или нет. Explain решал все мои проблемы, больше ничего не требовалось. Сейчас у меня есть мощная среда разработки, отладки и оптимизации запросов и процедур/функций, и все это нагромождение создает по-моему только больше проблем. А все почему? Потому что встроенный оптимизатор запросов — зло. Если в MySQL и PostgreSQL я напишу

select * from a, b, c where a.id = b.id, b.id = c.id

и в каждой из табличек будет хотя бы по 5к строк — все зависнет. И слава богу! Потому что иначе в разработчике, в лучшем случае, вырабатывается ленность писать правильно, а в худшем он вообще не понимает что делает! Ведь этот же запрос в MSSQL пройдет аналогично

select * from a join b on a.id = b.id join c on b.id = c.id

Встроенный оптимизатор причешет быдлозапрос и все будет окей.

Он так же сам решит, что лучше делать — exist или join и еще много чего. И все будет работать максимально оптимально.

Только есть одно НО. В один прекрасный момент оптимизатор споткнется о сложный запрос и спасует, и тогда вы получите большущую проблему. И получите вы ее, возможно, не сразу, а когда вес таблиц достигнет критической массы.

Так вот к сути статьи. exists и in — очень тяжелые операции. Фактически это отдельный подзапрос для каждой  строчки результата. А если еще и присутствует вложенность, то это вообще туши свет. Все будет окей, когда возвращается 1, 10, 50 строк. Вы не почувствуете разницы, а возможно join  будет даже медленнее. Но когда вытаскивается 500 — начнутся проблемы. 500 подзапросов в рамках одного запроса — это серьезно.

IRC (Internet Relay Chat)
    Как добавить файл в исключения антивируса Avast: пошаговая инструкция
    Avast (Аваст) — популярный антивирус благодаря функциональной бесплатной версии. Однако любые программы небезгрешны, и Avast порой совершает ошибки, удаляя или добавляя в свой чёрный список «чистые»,

    Рейтинг антивирусов для "Андроида", описание лучших
    Сегодня пользователи мобильных девайсов на основе Android-систем все чаще сталкиваются с необходимостью установки антивирусного и антишпионского программного обеспечения на свои устройства. И таких программных

    Выбор антивируса для Windows 10: учитываем результаты тестов
    После релиза Windows 10 у своевременно обновивших систему пользователей возник ряд вопросов по поводу безопасности компьютера. На форумах широко обсуждалась проблема, какой антивирус лучше для Windows

    Вирус не дает установить антивирус
    Хочу поделиться личным опытом. В офисе есть один ноутбук, работает вроде как без капризов с единственной странностью: не запускается антивирус. Вернее, запустится и тут же пропадет, не оседая в трее.

    Нужно ли устанавливать антивирус на Windows 10
    К сожалению, количество вирусных атак на компьютеры пользователей со временем не уменьшается, и поэтому антивирус является одной из самых необходимых программ, устанавливаемых в первую очередь. С появлением

    Microsoft Security Essentials
    Новый бесплатный антивирус от Microsoft предоставляет вам высокое качество защиты от вирусов и шпионских программ, в том числе троянов, интернет-червей и других вредоносных программ. Security Essentials

    Kaspersky Free 2018
    Kaspersky Free — бесплатный антивирус на 1 год, который защитит от 99% угроз уже после установки на операционную систему Windows. Скачать Касперский Фри антивирус бесплатно для ПК с официального

    Выбираем легкий антивирус для слабого компьютера или ноутбука
    Самый легкий антивирус для слабого компьютера – это актуальная тема на сегодняшний день, ведь далеко не все пользователи имеют мощные ПК, которые способы «тянуть» емкие приложения. Однако он нужен

    Как определить самый быстрый антивирус для компьютера
    С развитием информационных технологий, компьютер и ноутбук стал атрибутом повседневной жизни человека. Благодаря устройствам и интернету, пользователи могут получать полезную информацию, общаться с друзьями

    Лучшие антивирусы для Linux
    Немецкая лаборатория AV-Test определила лучшие антивирусы для Linux: 16 антивирусных решений были протестированы на противодействие вредоносным программам для Windows и Linux Перевод Comss.ru

rss