小编f44*_*ran的帖子

我们应该为每个“项目”创建一个模式吗?

这是一个数据库,用户可以在其中创建“项目”并对其进行处理。我们有一个表格project和各种其他表格,其中包含项目的不同属性(每个项目的多行,从 2-30K 行)。所有这些都包含projectID链接到project. 目前数据库是400GB。

我们正在尝试为每个项目创建一个架构,其中每个架构都将包含所有属性表。每当创建一个项目时,它都会获得一个新的模式。这意味着每个表最多包含 30K 行,这将提高select性能。我们将在查询中使用动态 SQL 来读取/插入。

我觉得这不是数据库的正确应用,但我如何向我的团队证明这是一种糟糕的方法?

schema performance sql-server

6
推荐指数
1
解决办法
1628
查看次数

在 SQL Server 中加速插入

我有一个存储过程,它在几个表中插入一些记录。至少在几个表中,插入的记录数为 10000+。不过不超过15K。注意到3-5 mins这个程序来完成。也可以从多个用户会话中调用相同的过程,这会导致某些会话等待 20 分钟才能获得响应。我能做些什么来减少这个时间吗?

数据库恢复模式是完整的(无法更改),因此根据我的理解 sqlBulkCopy 在这里没有帮助。很想听听您对此的看法。

该表包含 15 列。其中5列是该表的外键。没有标识列,而是所有 5 个外键列组合的聚集索引。我在其他关键列上有几个索引。其余的列是十进制和 varchar(50)。不过我确实有一个 varchar(max) 列。

尝试获取查询或查询相同以供您参考。查询中最昂贵操作 (54) 的屏幕截图:

平面图

如果表的聚集索引是列组合而不是标识列,插入会受到影响吗?

基本上查询是'insert into this_table select from this table join with 5个其他表,这些表的主键是外键,以更新这些值。联接都在表之间的键上。我不介意发布查询,但是您是否还需要查询中涉及的所有表的架构?

EDIT2: 首先感谢你们所有人的回答、评论和想法。从中发生读取的对象结果是一个没有聚集索引的堆。修改它确实显着改善了读取操作,从而改善了整体。

我将 David Spillet 的答案标记为已接受,因为它提供了一种解决问题的有条理的方法。学到了一些关于发布问题的知识:)

也感谢飞盘的评论和回答。我知道我一直在修改问题:)

performance sql-server insert performance-tuning

4
推荐指数
1
解决办法
8770
查看次数