Я уверен, что если у меня есть хранимые процедуры с использованием tempdb
для записи временной таблицы, мне бы лучше переключить их на переменные таблицы, чтобы получить лучшую производительность?Использует переменные таблицы быстрее, чем временные таблицы
ответ
Таблицы темпов лучше работают. Если вы используете переменную таблицы и данные в переменной становятся слишком большими, SQL Server автоматически преобразует переменную в временную таблицу.
Это зависит от почти каждого вопроса, связанного с базой данных, от того, что вы пытаетесь сделать. Так что трудно ответить без дополнительной информации.
Так что я отвечу, попробуйте и посмотрите на план выполнения. Используйте самый быстрый способ с минимальными затратами.
Имеет ли смысл мой комментарий наверху, и я должен переключиться? –
Трудно сказать, переключиться или нет. Если вы хотите вернуть переменную таблицы, и ваши действия будут быстрыми в обоих направлениях, да, я бы переключил. Вы действительно должны попробовать. Например, на прошлой неделе я оптимизировал запрос, который становится настолько медленным. 20 часов назад, теперь 2 минуты. Я изменил только переменную таблицы на временную таблицу. Возвращенные данные были не большими, всего 2000 строк, но много операций и фильтров. – dknaack
«Если вы используете переменную таблицы и данные в переменной становятся слишком большими, SQL Server автоматически преобразует переменную в временную таблицу». Это утверждение полностью неверно. –
@Table может быть быстрее, так как там меньше «время установки», так как объект находится в памяти только.
@ В таблицах много уловов.
У вас может быть первичный ключ в @Table, но об этом. Другие индексы Clustered NonClustered для комбинаций столбцов невозможны.
Также, если ваша таблица будет содержать любые реальные тома данных (более 200, может быть, 1000 строк), доступ к таблице будет медленнее. Особенно, когда у вас, вероятно, не будет полезного индекса на нем.
# Таблицы - это боль в procs, поскольку их необходимо отбрасывать при отладке, им требуется больше времени для создания. и они занимают больше времени, чтобы настроить, поскольку вам нужно добавить индексы в качестве второго шага. Но если у вас много данных, тогда их #tables каждый раз.
Даже в тех случаях, когда в таблице содержится менее 100 строк данных, вы все равно можете использовать # Таблицы, так как вы можете создать полезный индекс в таблице.
Таким образом, я использую @Tables большую часть времени для упрощения при выполнении простой proc и т. Д. Но все, что нужно выполнить, должно быть #Table.
Я тоже верил в эту басню, пока я недавно не застрял в очистке запроса и (одна из последних вещей, которые я сделал), тот же самый запрос (протестированный несколько раз, используя те же параметры), вернувшийся через 5 секунд, используя '# TempTable' против 16 секунд с использованием '@ TableVar' – Jason
@ Таблицы не имеют статистики, поэтому план выполнения влечет за собой дополнительные догадки. Следовательно, рекомендуется верхний предел 1000-ичных строк. # Таблицы имеют статистику, но эти can be cached между вызовами. Если ваши мощности существенно различаются каждый раз, когда SP запускается, вы каждый раз должны получать REBUILD
и RECOMPILE
. Разумеется, это накладные расходы, но они должны быть сбалансированы с расходами на мусорный план.
Оба типа будут делать IO to TempDB.
Таким образом, нет, @ Таблицы не являются панацеей.
- 1. Почему временные таблицы быстрее, чем переменные таблицы для соединений?
- 2. Временные таблицы или переменные производительности SQL Server
- 3. Sql Вложенные временные таблицы
- 4. Почему пересечение (...) быстрее, чем соединение таблицы данных?
- 5. Оптимальные временные таблицы MySQL (таблицы памяти)?
- 6. Параллельно загружайте временные таблицы
- 7. Rails Временные таблицы
- 8. Создал временные таблицы динамически
- 9. phpMyAdmin SQL - Временные таблицы
- 10. Java - MySQL - Временные таблицы
- 11. Временные таблицы Краткое руководство
- 12. Временные таблицы в infuxdb
- 13. Где находятся временные таблицы?
- 14. временные таблицы или атрибуты
- 15. Временные таблицы в Oracle
- 16. Временные таблицы в sp
- 17. Postgres и временные таблицы
- 18. Временные таблицы MySQLi с PHP
- 19. Временные таблицы в WHILE LOOP
- 20. Использует ли Oracle временные таблицы во время процедур резервного копирования
- 21. Использует ли этот запрос какие-либо подзапросы или временные таблицы?
- 22. Стойкие временные таблицы в SQL?
- 23. Как сохранить временные таблицы и переменные в mysqli?
- 24. Как перечислить временные таблицы/представления в SQLite?
- 25. Временные таблицы в sql-сервере?
- 26. Hierachy, временные таблицы Вставка от
- 27. Временные таблицы с использованием RMySQL
- 28. Временные таблицы Dynamic Sql VS
- 29. MS SQL Временные таблицы зацикливание
- 30. Проверка таблицы на временные перекрытия
Сколько записей будет в временных таблицах, какова конфигурация вашего сервера, например, как табличные переменные могут быть перенесены на tempdb. http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/30/sql-server-table-variable-vs-local-temporary-table.aspx – Kane
Данные различаются, но это хорошая точка , Если переменная таблицы будет более эффективной с небольшим количеством данных, я перейду на нее. –
Возможный дубликат [В чем разница между таблицей temp и табличной переменной в SQL Server?] (Http://stackoverflow.com/questions/27894/whats-the-difference-between-a-temp-table-andtabletable -variable-in-sql-server) или это: http: // stackoverflow.com/questions/6991511/sql-server-temp-table-vs-table-variable и, возможно, больше – gbn