我正在努力理解tempDB,以下是我脑海中闪现的疑虑。
tempDB中数据的生存期是多少?假设一个查询正在执行一些Order By,并使用tempDB来执行该操作。在这个查询完成后,其他人也会执行一个利用tempDB的查询。第二个查询是查找由tempDB中的第一个查询编写的记录,还是删除这些记录?tempDB中创建的任何tempDB可见的tempDB表?由于这个查询,我如何知道创建了哪个临时表?Sql引擎是否遵循任何命名约定来命名这些临时表?我是tempDB的新手,所以请原谅我问了这么愚蠢的问题(如果有的话) :-)
如果有人能告诉我一个很好的资源,可以帮助我了解tempDB,那就太好了。
发布于 2009-10-20 15:01:31
Temp表存储在tempdb中,直到删除连接为止(在全局临时表的情况下,最后一次使用它的连接被删除时)。您也可以(这是一个很好的做法)在使用了drop语句之后手动删除该表。
不,如果临时表是本地临时表(他们可以看到和使用全局临时表),其他人就无法看到它们。多个人可以运行使用相同临时表名称的命令,但它们不会在本地临时表中重叠,因此您可以有一个名为#test的表,也可以有10,000个其他用户,但是每个人都有自己的结构和数据。
一般情况下,您不希望在tempdb中查找临时表。检查是否存在是可能的,但这是我唯一一次直接引用tempdb。只需使用临时表名即可。下面是检查是否存在的示例
IF OBJECT_ID('TempDB.dbo.#DuplicateAssignments') IS NOT NULL
BEGIN
DROP TABLE #DuplicateAssignments
END 您可以在名称前面加上#(对于本地表,您将使用999.9%的时间)和##来命名全局临时表,然后是您想要的其他名称。
发布于 2009-10-20 15:09:35
有几篇MSDN文章可能是Server中tempDB数据库的最佳信息来源。
tempdb数据库
tempdb系统数据库是一个全局资源,可供连接到Server实例的所有用户使用,用于保存以下内容:
对tempdb中的操作进行最少记录。这使事务可以回滚。每次启动Server时都会重新创建tempdb,以便系统总是以数据库的干净副本启动。在断开连接时会自动删除临时表和存储过程,当系统关闭时,没有连接处于活动状态。因此,从Server的一个会话到另一个会话,永远不会保存tempdb中的任何内容。在tempdb上不允许进行备份和还原操作。
还有tempdb和索引的创建、这篇博客文章和在Server 2005中使用tempdb,它们声明:
Server系统数据库tempdb在Server 2005中经历了许多更改。Server 2005中有新的tempdb用法和内部优化;自从Server 2000以来,tempdb体系结构基本没有变化。 系统数据库与用户数据库非常相似。主要区别在于,在Server关闭.之后,tempdb中的数据不会持续存在。
发布于 2009-10-20 14:59:04
https://stackoverflow.com/questions/1595214
复制相似问题