改进Big SqlServer 2008 R2数据库性能,索引和分区

时间:2017-04-04 12:46:05

标签: sql-server indexing sql-server-2008-r2 database-performance partitioning

我在'SQL Server 2008 R2'中有一个数据库,它的大小约为5 TB,并且它的大小不断增大。 我在tbl1上运行一个包含数亿行的简单查询时遇到了一些问题:

select x1,x2,x3
from tbl1
where date > '2017-04-03 00:00:00.000' and date < '2017-04-04 00:00:00.000'
      and mid = 300

此查询大约需要20秒。 我在datemid列上有两个非聚集索引,此查询利用了它们。

在此表中提高selectinsert的效果的最佳方法是什么? (例如自动分区)

我正在使用Entity Framework,因此我不想更改表的名称或将其分区为不同的名称。

我感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您提出问题的方式让我相信您的印象是分区是您必须手动执行的操作,即将表拆分为多个表,每个表都有不同的名称。

事实并非如此。

使用ms-sql-server,为了对表和索引进行分区,您只需发出CREATE PARTITION命令即可​​。所以,继续查看它们:

CREATE PARTITION FUNCTION

CREATE PARTITION SCHEME

所以,在你的情况下,我会假设你会在date列上进行分区,可能每年都在不同的分区上,或者甚至可能每个月在不同的分区上。

但请注意,您的问题可能属于X-Y problem。您遇到的困难似乎与性能有关。您似乎已经得出结论,为了解决您的问题,您需要做的是分区,因此您发布了有关分区的问题。我正在回答你的问题,但很可能你的问题不是分区。它可能是很多其他的东西,例如锁定:如果你的表太大而且它不断增长,那么可能发生的事情就是不断向它添加行,所以可能是你的{{1为了访问该表,我们正在与你的SELECT进行斗争。