1) Использование как можно большего количества JOIN в SELECT, UPDATE и DELETE. Иногда люди перебирают записи (или используют курсоры) для обновления, удаляя записи из таблицы, но вы почти всегда можете присоединиться к таблицам, чтобы достичь того же результата, и это значительно повысит производительность. Пример здесь .
2) Вам не нужно использовать временные таблицы, если вы не добавили в него несколько записей, не выполнили несколько промежуточных операций и не вернули результаты. Для этого вам все равно следует использовать Табличные переменные .
3) Если вы не хотите использовать временные таблицы по указанным выше причинам, потому что вам не нужны промежуточные обновления и т. Д., Но вы все еще хотите использовать наборы результатов для дальнейших объединений, попробуйте использовать CTE (общие выражения таблиц), Я знаю, что это не может быть связано с производительностью, но очень полезно по сравнению с производными таблицами.
4) Как кто-то предлагал выше, попробуйте использовать IF EXISTS вместо COUNT. Было бы также хорошо.
5) Попробуйте использовать имена столбцов вместо * в запросах SELECT, где это возможно.