我试图理解tempDB,以下是我脑海中浮现的疑问。


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


我是tempDB的新手,请原谅我提出这样愚蠢(如果有的话)的问题:-)

如果有人可以向我指出可以帮助我了解tempDB的良好资源,那将是非常不错的。

最佳答案

临时表存储在tempdb中,直到断开连接为止(或者在使用最后一个连接的全局临时表中断开连接时)。当您完成了使用drop table语句使用表时,也可以(这样做是一种很好的做法)。

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

您通常不想在tempdb中查找临时表。可以检查是否存在,但这是我唯一一次直接引用tempdb的情况。只需使用您的临时表名称。以下示例检查存在性

  IF OBJECT_ID('TempDB.dbo.#DuplicateAssignments') IS NOT NULL
  BEGIN
  DROP TABLE #DuplicateAssignments
  END


通过用#开头(对于本地表,您将使用999.9%的时间)和为全局临时表加上##来命名临时表,然后使用所需的其余名称。

关于sql - tempDB如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1595214/

10-12 18:39