![]() |
1
34
那条建议一直在流传 for a long time :
幸运的是,这只是SQL 6.5的一个问题。它在7.0和之后被修复。 |
![]() |
2
17
这可能会漂浮很长一段时间,为各种“顾问”提供资金。像所有的神话一样,它有一个核心的真理和很多的基础知识。 事实:SQL2000和以前的版本都知道tempdb中数据块分配的争用问题。事实上,在所有数据库中争用都是正确的,但由于tempdb的使用量很大,所以在tempdb中更容易看到争用。记录在 KB328551 :
跟踪标志
关于这个神话的所有其他东西几乎都是B。
有关详细信息,请参阅本文: Misconceptions around TF1118 . |
![]() |
3
10
为什么不执行以下操作?
该语句将立即运行-创建临时表并避免任何可能的锁定。然后您可以像往常一样插入它:
|
![]() |
4
1
如果在事务内部创建临时表,则可能会被阻塞。虽然这通常是不推荐的,但我已经看到这做了很多。 但是,阻塞这一原因发生在tempdb中的某些系统表上,这些表不会影响其他连接创建临时表(除了2000之前的SQL版本?)。这确实意味着,除非将事务隔离级别设置为“未提交读取”,否则在tempdb上运行sp_spacesused将被阻止。此外,从SSMS查看tempdb的属性将失败并超时,这是毫无疑问的,因为它使用的是读提交事务隔离级别。 |
![]() |
5
0
我想说,没有锁的证明就意味着没有锁,这就是你的证明。为什么要在其中创建临时表的方法(创建或选择…into)在锁定tempdb方面有所不同? |
![]() |
6
0
如果这是真的,那么MSSQL将有问题,因为任何大型查询都可以使用tempdb来保存行的副本。在查询计划中,这通常被视为一个表假脱机,或者如果散列联接运算符的存储桶内存不足,则可以使用它。 您可以查看使用表变量,如果表变量变大,MSSQL将尝试将其存储在内存中并移动到tempdb。
当然,您应该首先评估是否需要临时表和副本。不过,如果查询足够复杂,使用临时表的可读性要高得多,那么它也可能足够复杂,使临时表值得使用。 |
![]() |
7
0
|
![]() |
8
0
虽然select into已从阻塞tempdb中修复,但在编写诸如“测试中”之类的代码时,我会小心一些,因为某些系统表确实会被阻塞。 参考文献: http://www.sqlservercentral.com/Forums/Topic1642797-2799-1.aspx |
![]() |
Rogue258 · 在DB2SQL中使用存储过程/宏进行声明和循环 2 年前 |
![]() |
Moyura · 如何从存储过程中获取最高值 3 年前 |
![]() |
muhtarkator · 创建存储过程插入和更新 3 年前 |
![]() |
DRUIDRUID · 执行SP时从表中获取值 6 年前 |
![]() |
user416 · oracle中的组存储过程 6 年前 |