索引和分区:提高 SqlServer 2008 R2 查询性能

Indexing and Partitioning: Improving SqlServer 2008 R2 query performance

我在 '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 列上有两个非聚集索引,这个查询利用了它们。

在此 table 中提高 selectinsert 性能的最佳想法是什么? (比如自动分区)

我正在使用 Entity Framework,所以我不想更改 table 的名称或将其分成一些不同的名称。

感谢任何帮助。

你的问题陈述方式让我相信你的印象是分区是你必须手动完成的事情,即将一个 table 分成多个 table有一个不同的名字。

事实并非如此。

使用 ms-sql-server,要对 table 和索引进行分区,您需要做的就是发出 CREATE PARTITION 命令。因此,继续查找它们:

CREATE PARTITION FUNCTION

CREATE PARTITION SCHEME

因此,在您的情况下,我假设您将在 date 列上进行分区,可能将每年放在不同的分区上,甚至可能将每个月放在不同的分区上。

但是,请注意您的问题可能属于 X-Y problem。您遇到的困难似乎与性能有关。您似乎已经得出结论,为了解决您的问题,您需要做的是分区,因此您发布了一个关于分区的问题。我正在回答你的问题,但很可能你的问题不是分区。它可能是很多其他的事情,例如锁定:如果你的 table 是如此之大并且它在不断增长,那么可能发生的事情是不断向它添加行,所以它可能是您的 SELECT 正在与您的 INSERT 争夺对 table.

的访问权限