首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tempDB是如何工作的?

tempDB是如何工作的?
EN

Stack Overflow用户
提问于 2009-10-20 14:52:13
回答 3查看 52.5K关注 0票数 16

我正在努力理解tempDB,以下是我脑海中闪现的疑虑。

  1. tempDB中数据的生存期是多少?假设一个查询正在执行一些Order By,并使用tempDB来执行该操作。在这个查询完成后,其他人也会执行一个利用tempDB的查询。第二个查询是查找由tempDB中的第一个查询编写的记录,还是删除这些记录?
  2. 是否有引擎在tempDB中创建的任何tempDB可见的tempDB表?由于这个查询,我如何知道创建了哪个临时表?Sql引擎是否遵循任何命名约定来命名这些临时表?

我是tempDB的新手,所以请原谅我问了这么愚蠢的问题(如果有的话) :-)

如果有人能告诉我一个很好的资源,可以帮助我了解tempDB,那就太好了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-20 15:01:31

Temp表存储在tempdb中,直到删除连接为止(在全局临时表的情况下,最后一次使用它的连接被删除时)。您也可以(这是一个很好的做法)在使用了drop语句之后手动删除该表。

不,如果临时表是本地临时表(他们可以看到和使用全局临时表),其他人就无法看到它们。多个人可以运行使用相同临时表名称的命令,但它们不会在本地临时表中重叠,因此您可以有一个名为#test的表,也可以有10,000个其他用户,但是每个人都有自己的结构和数据。

一般情况下,您不希望在tempdb中查找临时表。检查是否存在是可能的,但这是我唯一一次直接引用tempdb。只需使用临时表名即可。下面是检查是否存在的示例

代码语言:javascript
复制
  IF OBJECT_ID('TempDB.dbo.#DuplicateAssignments') IS NOT NULL 
  BEGIN 
  DROP TABLE #DuplicateAssignments 
  END  

您可以在名称前面加上#(对于本地表,您将使用999.9%的时间)和##来命名全局临时表,然后是您想要的其他名称。

票数 19
EN

Stack Overflow用户

发布于 2009-10-20 15:09:35

有几篇MSDN文章可能是Server中tempDB数据库的最佳信息来源。

tempdb数据库

tempdb系统数据库是一个全局资源,可供连接到Server实例的所有用户使用,用于保存以下内容:

  • 显式创建的临时用户对象,例如:全局或本地临时表、临时存储过程、表变量或游标。
  • 由Server数据库引擎创建的内部对象,例如,用于存储假脱机或排序的中间结果的工作表。
  • 由使用读提交、使用行版本控制隔离或快照隔离事务的数据库中的数据修改事务生成的行版本。
  • 由用于功能的数据修改事务生成的行版本,例如:联机索引操作、多个活动结果集(MARS)和触发器后。

对tempdb中的操作进行最少记录。这使事务可以回滚。每次启动Server时都会重新创建tempdb,以便系统总是以数据库的干净副本启动。在断开连接时会自动删除临时表和存储过程,当系统关闭时,没有连接处于活动状态。因此,从Server的一个会话到另一个会话,永远不会保存tempdb中的任何内容。在tempdb上不允许进行备份和还原操作。

还有tempdb和索引的创建这篇博客文章在Server 2005中使用tempdb,它们声明:

Server系统数据库tempdb在Server 2005中经历了许多更改。Server 2005中有新的tempdb用法和内部优化;自从Server 2000以来,tempdb体系结构基本没有变化。 系统数据库与用户数据库非常相似。主要区别在于,在Server关闭.之后,tempdb中的数据不会持续存在。

票数 3
EN

Stack Overflow用户

发布于 2009-10-20 14:59:04

  1. 在TempDB中创建的临时表在查询完成后被删除。
  2. 我不确定(我必须尝试一下),但我认为理论上在TempDB中创建的所有表都是可见的,尽管只有创建表的用户才有权访问它。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1595214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档