Неглобальные временные таблицы гарантированно никогда не столкнутся.
Глобальные временные таблицы аналогичны материализованным таблицам в том смысле, что имя должно быть уникальным для каждого сервера.
Как правило, используйте таблицы ##GLOBAL_TEMP
, только когда это необходимо.
В противном случае, если вы пишете процесс, который мог бы запускаться более одного раза одновременно, процессы будут взаимодействовать друг с другом непредсказуемым образом, что крайне затрудняет поиск и устранение неисправностей - Instance 1
может изменить данные, используемые Instance 2
что приводит к тому, что Instance 3
также приводит к неверным результатам.
Мое личное мнение о временных таблицах таково, что я использую их только когда:
- У меня есть набор результатов от среднего до большого (более 1 м строк)
- Мне нужно будет индексировать этот набор результатов
- Мне не нужно будет использовать этот набор результатов более одного раза за итерацию процесса
- Я уверен, что мне не нужно будет возобновлять процесс в любой момент
Я выделил этот последний пункт, потому что это основная причина, по которой я пытаюсь свести к минимуму использование временной таблицы:
Если у вас длительный процесс и вы используете временные таблицы для хранения промежуточных наборов данных, и что-то умирает, скажем, на 90%, вы должны полностью перезапустить , если эти данные не в материализованной таблице большую часть времени.
Некоторые из моих процессов работают в течение нескольких дней на миллиардах строк данных, поэтому я не заинтересован в перезапуске с нуля.