Подскажите алгоритм быстрого left join (ms t-sql)
От: paradok  
Дата: 19.05.22 07:32
Оценка:
Приветствую!

ОПИСАНИЕ:
Есть две таблицы, без индексов, по 200..300к записей, таблицы частично обновляются 1 раз 2-3 мин.
делаем left join по id (вы выводим всю результирующую таблицу в csv или excel)
id в обеих таблицах чуток не уникальный, порядка 1..2% дубликатов по id (но не всех полей строк) — принципиально не устранимо (!)
(id не уникальны, но есть метки времени, которые тоже не уникальны, но не коррелированы с id и не коррелированы между таблицами, по ним left join не сделать)

ПРОБЛЕМА:
Из sql studio запрос left join по id выполняется за 3..5 сек, отлично! (с компа разраба, с повыш. правами)
из хранимой процедуры — 5..10 минут! Кошмар ! (с компов обычных юзеров)
код строго один и тот же!

Кажется не хватает юзерам выполняющему вызов хранимой процедуры каких-о прав и ресурсов (памяти например)...
Изменить права нет возможности, я не сисадмин, а он ничего менять не будет, т.к. в сети под 1к компов с разыми правами "агрессивных и хитрых" юзеров
и любое изменение в стабильно работающей системе чревато дырами в безопасности и проблемами с чрезмерной нагрузкой на сервера (по его словам).
(дать процедуре более высокие права, чем вызывающему ее юзеру тоже нельзя — отказ от сисадмина)

ВОПРОС:
Подскажите какие алгоритмы применяются для быстрого left join
и можно ли их как-то имплементировать их (на ms t-sql) с меньшими требованиями по памяти,
но хотя бы укладываться в 10 сек, а не в 5 минут?

P.S. что-то смутно промелькнула мысль про слияние таблиц и сортировку по id с последующими траспозицией ... очень смутно ... не?

----
вот примитивная и очень медленная имплементация со сстэковерфллоу
там есть фраза итерэйт фроф ол валью оф табле
How to implement Left Outer Join in C language
https://stackoverflow.com/questions/28620977/how-to-implement-left-outer-join-in-c-language
Отредактировано 19.05.2022 10:44 paradok . Предыдущая версия . Еще …
Отредактировано 19.05.2022 9:50 paradok . Предыдущая версия .
Отредактировано 19.05.2022 9:11 paradok . Предыдущая версия .
Отредактировано 19.05.2022 7:33 paradok . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.