У меня есть таблица поиска (##lookup
). Я знаю, что это плохой дизайн, потому что я дублирую данные, но это значительно ускоряет мои запросы. У меня есть запрос, который заполнит эту таблицуУдалить, если не в запросе
insert into ##lookup select distinct col1,col2,... from table1...join...etc...
Я хотел бы, чтобы смоделировать такое поведение:
delete from ##lookup
insert into ##lookup select distinct col1,col2,... from table1...join...etc...
Это ясно обновить таблицу правильно. Но это много вставки и удаления. Это бесполезно с моими индексами и блокирует таблицу для выбора.
Эта таблица также может быть обновлено что-то вроде:
delete from ##lookup where not in (select distinct col1,col2,... from table1...join...etc...)
insert into ##lookup (select distinct col1,col2,... from table1...join...etc...) except if it is already in the table
Второй путь может занять больше времени, но я могу сказать, «без блокировки» и я буду иметь возможность выбрать из таблицы.
Любые идеи о том, как написать запрос во втором случае?
ya наилучшим образом, идеальным решением было бы использовать «метриализованный вид» или индексированный вид, поскольку он вызывается на SQL-сервере. Однако, чтобы индексировать представление, вы не должны использовать «self joins», в этом случае self-join даже включает в себя использование тех же таблиц дважды в соединении, даже если это не является технически самосоединением. Поэтому нельзя использовать эту опцию, которая была бы оптимальной. Поверьте мне, мне и нескольким людям намного умнее, чем я провел много часов, чтобы придумать лучший солетон. Индексирование исходных таблиц до смерти только дошло до нас, и запросы не могут быть оптимизированы ... – kralco626
но, я полностью согласен с вами. Это жуткое решение ...если только Microsoft разрешит мне использовать представление ... Для моей проблемы есть работа arround, но для меня это слишком сложно понять. Я задал вопросы об этом здесь: http://stackoverflow.com/questions/3046058/need-some-serious-help-with-self-join-issue Если эта проблема будет решена, я не буду этого делать. – kralco626