На днях мне пришлось столкнуться с вопросом – как влияют cross database joins на производительность запросов в SQL Server, при условии что базы находятся в пределах одного сервера?
Поискав в Google я не нашел однозначного ответа на этот вопрос – кто-то писал что разницы нет никакой, кто-то наоборот отмечал двукратное замедление запросов.
Поскольку для меня это важно, я провел несколько тестов на выборку и вставку, в которых объединялись две таблицы – одна размеров в 8 миллионов строк и другая в 30 тысяч строк.
Эти таблицы поочередно располагались в одной и в разных базах.
Никакой разницы в значениях logical reads, physical reads, duration не было.
Поэтому мой ответ – Нет, cross database joins не влияют на производительность запросов в SQL Server.
И это достаточно логично :)
ОтветитьУдалитьмне тоже странно, отчего у тебя такой вопрос возник.
ОтветитьУдалитьМне другое любопытно. Не просто join, а именно работа - кеши запросов там, еще чего. Т.е. не при единичном синтетическом запросе, а при постоянном обновлении базы, и частых запросах. Будет ли просадка?
По идее - не должно, но как оно там внутре кеширует - неизвестно. Приоритеты может какие-то вылезают, еще чего.
Мне тоже кажется что разницы не должно быть, но проверить можно.
ОтветитьУдалитьА вопрос возник из-за того, что мы сейчас это довольно активно используем и на днях мне сказали, что видели в интернете статью, где кто-то советовал не использовать cross database joins, так как они снижают производительность.
Статью, к сожалению, найти не удалось, поэтому и возник такой вопрос.
На PDC чуваки из команды MS говорили, что когда-то у них была идея делить кеши и память между базами, но выродилась она лишь в попытку делить их между инстансами сервера. Попытка тоже не слишком эффективная и удачная, так что, в последних версиях, они официально за изолированную единицу считают сервер. То есть, (виртуальную) машину. Они даже говорили, что были очень удивлены тому, что производительность при таком виде изоляции даже лучше.
ОтветитьУдалитьТак что, внутри сервера (и в чём-то даже машины) SQL Server вполне себе шарит память и кеши, и разбивка на базы данных в этом аспекте на производительность влиять сильно не должна...
Вот и отлично
ОтветитьУдалитьMichael Smirnov
ОтветитьУдалить"видели в интернете статью, где кто-то советовал не использовать cross database joins, так как они снижают производительность."
Наверное речь шла о CE
Почему именно о CE?
ОтветитьУдалитьПо выходу се, была заметка, только вот где нашол твой друг её?
ОтветитьУдалитьНе знаю...
ОтветитьУдалить