Как да се избегнат затрудненията при използване на временни таблици

Според статията от Нийл Бойл в SWYNK.COM «Избягване на задръствания благодарение на временни маси»

Нийл казва, че използването на временни таблици може да доведе до появата на затруднения на вашия сървър на база данни. Tempdb проблеми блокиране могат да възникнат при 6,5 и 7 версии на SQL Server. Във версия 6.5, като често се използва за избор. в, за създаване на временна таблица, например:







изберете *
в #tempTable
от източник

По време на изпълнението на това искане на временната база данни ще бъде заключена до края на цялата извадка. Това може да отнеме дълго време, ако таблицата източник съдържа голямо количество данни. По време на локаута, другите потребители не могат да създават временни таблици. В действителност, в пречка, която таблици tempdb система са заключени (sysobjects). В по-късните версии на SQL Server брави променен модел, който избягва този проблем.






С цел да се смекчат последиците от възможните ключалки в tempdb е необходимо да се гарантира, че операцията ще "създаде временна таблица" извършва възможно най-бързо. Например, може да се използва следната конструкция:

Създаване на таблица #temp (
.
)
поставете #temp
изберете *
от sourceTable

Този пример създава временна таблица в началото, която се освобождава незабавно в sysobjects. Ключалката е освободен възможно най-скоро.
Ако е необходимо да се избегне инструкциите за вмъкване. Into или ако пиша само един код модул и не знам точното определение на масата, докато по време на работа, може да използвате следния трик:

изберете *
в #temp
от sourceTable
където 1 = 0

поставете #temp
изберете *
от sourceTable

Описаната по-горе проблемът не се отнася за MS SQL Server версия 7, но - това е един от случаите, където може да се създаде по невнимание в пречка за всяка версия.