相关疑难解决方法(0)

为什么选择最大分区列比索引列慢得多?

我有一个很大的分区表(300+M 行,70 个活动分区)。该表具有 (K0, K1) 的集群 PK,并在列 K1 上进行分区。而 K1 的选择性非常低。

但是,以下查询需要半分钟,扫描计数为 170,逻辑读取为 603K。

select max(K1) from table
Run Code Online (Sandbox Code Playgroud)

然而,在 K1 上索引的非分区表上的类似查询不需要时间,扫描计数为 1,逻辑读取为 5。

是否应该在 K1 上创建无分区索引?

编辑:
为 K1 上没有索引的分区表规划文本。在 K0,K1 上使用聚集 PK,然后在 C1 上创建索引。

  |--流聚合(DEFINE:([Expr1004]=MAX([partialagg1005])))
       |--Parallelism(Gather Streams)
            |--Stream Aggregate(DEFINE:([partialagg1005]=MAX([DB1].[dbo].[table1].[K1])))
                 |--聚簇索引扫描(OBJECT:([DB1].[dbo].[table1].[PK_dbo_tabl1]))

为索引在 K1 上的非分区表规划文本。

  |--流聚合(DEFINE:([Expr1003]=MAX([DB1].[dbo].[table2].[K1])))
       |--顶(顶表达式:((1)))
            |--索引扫描(OBJECT:([Db1].[dbo].[table2].[idx_K1]), ORDERED BACKWARD)

使用 K0、K1 上的聚集 PK 和 C1 上的索引为分区表规划文本。

  |--流聚合(DEFINE:([Expr1004]=MAX([partialagg1005])))
       |--Parallelism(Gather Streams)
            |--Stream Aggregate(DEFINE:([partialagg1005]=MAX([db1].[dbo].[table1].[K1])))
                 |--索引扫描(OBJECT:([db1].[dbo].[table1].[IX_C1]))

sql-server-2008 sql-server

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

标签 统计

sql-server ×1

sql-server-2008 ×1