在SQL Server上创建和删除太多表是否有缺点

时间:2011-08-30 14:06:06

标签: sql sql-server maintenance

我想知道以下使用数据库的方式是否存在固有的缺陷...... 我想创建一个带有Web前端的报告系统,我在其中查询数据库以获取相关数据,并使用“SELECT INTO”将查询结果发送到新数据表。然后程序将从该表中进行查询以显示报告的“页面”。这具有如下优点:如果存在大量数据,则可以一次向用户呈现一些数据作为页面。当用户请求报告的不同页面时,可以反复访问相同的数据表。当Web会话结束时,可以删除表。

我准备围绕诸如跟踪表格以及确保在需要时删除它们等问题进行编程。

我有一个模糊的担忧,即在很长一段时间内,数据库本身可能会遇到某种形式的维护问题,因为随着时间的推移创建并丢弃了这么多表。即使是日复一日,也许可以说创建和删除1000个这样的表。

有没有人看到任何令人担忧的原因?

感谢您提出任何建议/疑虑。

3 个答案:

答案 0 :(得分:3)

在开始实施解决方案之前,请考虑使用SSAS或简单地使用具有良好模型和正确索引表的SQL Server。 SQL Server,IIS和操作系统都执行难以击败的缓存操作。

值得关注的是,您正在尝试编写将尝试并优于SQL Server和IIS的代码......这是过早优化的典型示例。成千上万的程序员时间用于确保SQL Server和IIS尽可能快速有效,并且您的策略不太可能获得更好的性能。

答案 1 :(得分:1)

如果你谈论小桌子,

每天1000不应该是一个问题。

我不知道sql-server,但在Oracle中你有临时表(small articleanother)的概念。插入此类表中的数据仅在当前会话中可用。当会话结束时,数据“消失”。在这种情况下,您不需要丢弃任何东西。每个用户都插入同一个表中,其他人无法看到他的数据。优点:减少维护。 您可以检查sql-server中是否有类似的东西。

答案 2 :(得分:1)

首先:给@Paul Sasik的答案+1。

现在,回答你的问题(如果你仍然想要采用你的方法)。 如果使用VARBINARY(MAX)列(from the MSDN

,可能会引起关注
  

如果删除包含VARBINARY(MAX)列的表   FILESTREAM属性,文件系统中存储的任何数据都不会   除去。

如果你决定采用你的方法,我会使用全局临时表。当没有更多连接使用它们时,它们应该自动获得DROPped,但您仍然可以显式地删除它们。 在您的查询中,您可以检查它们是否存在,如果它们不存在(不再存在),则创建它们。

IF OBJECT_ID('mydb..##temp') IS NULL
-- create temp table and perform your query
通过这种方式,您可以使用大部分逻辑来执行查询并一起管理临时表,这样可以使其更易于维护。另外,它们是为了创建和删除而构建的,因此可以非常安全地认为SQL Server不会因创建和删除大量SQL Server而受到任何影响。