Я проводил несколько тестов производительности .net на множестве различных фреймворков доступа к данным.
Я заметил, что производительность при доступе к таблице tempdb в SQL намного выше, чем при использовании обычной таблицы. Я не совсем уверен, почему это так, но похоже, что когда entityFramwork (одна из фреймворков) устанавливает связь с
-- network protocol: TCP/IP
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read committed
Производительность снижена до уровня обычного стола.
Кто-нибудь знает, почему это должно быть?
На странице справки BOL для tempdb перечислены улучшения производительности, сделанные для доступа к tempdb.
Тем не менее, в вашем списке есть два параметра, которые будут влиять на выполнение кода: implicit_transactions
и transaction isolation level
.
поскольку read committed
по умолчанию transaction isolation level
я предполагаю, что это настройка implicit_transactions
к off
каким-то образом вынуждает доступ к базе данных tempdb через дополнительный шаг, которого избегают при выполнении неявных транзакций.
Проверьте это, чтобы быть уверенным.
РЕДАКТИРОВАТЬ: в стороне, рассмотрите возможность выполнения действительно критических по времени временных вычислений в переменная таблицы; это только память и, следовательно, в 100-1000 раз быстрее, чем tempdb ...
Обратной стороной является очевидная точка уменьшения доходности, поскольку у табличных переменных нет индексов.