SQLServer2005表分区(第三章)

2014-11-24 08:36:20 ? 作者: ? 浏览: 2

1、分区表与普通表(加索引)对比

2、分区表(加非聚集索引)与普通表(加索引)对比

--------------------------------华丽的分割线---------------------------------

1、分区表与普通表(加索引)对比

接第二章最后的补充例子,测试数据为10000条。表a依然是我们分了3个区的分区表,我们把普通表b的id字段设置成主键(同时设置了聚集索引),如图1所示:

\

然后我们进行表a(分区表)和表b(添加索引表)的对比,代码如下:

set statistics io on
select * from a  where id=9999
select * from b  where id=9999
set statistics io off

/*
(1 行受影响)
表 'a'。扫描计数 1,逻辑读取 44 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

(1 行受影响)
表 'b'。扫描计数 0,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
*/
执行计划如图2所示:

\图2

我们可以看到,有聚集索引的表b比分区表a查询开销要少。

--------------------------------华丽的分割线---------------------------------

2、分区表(加非聚集索引)与普通表(加索引)对比

(聚集索引:一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序。

非聚集索引:一种索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。)

首先我们应该知道的是分区表是不可以添加聚集索引的,因为聚集索引是要对表中数据确定物理顺序的,这与分区冲突。所以我们为分区表a设置主键(自动生成了非聚集索引)。

设置之后,如图3所示:

\图3

执行代码如下:

set statistics io on
select * from a  where id=9999
select * from b  where id=9999
set statistics io off
/*

(1 行受影响)
表 'a'。扫描计数 0,逻辑读取 3 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

(1 行受影响)
表 'b'。扫描计数 0,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

*/

执行计划如图4所示:

\图4

我们看到,加了非聚集索引的分区表a新能提升了一些。

--------------------------------华丽的分割线---------------------------------

结论:表分区并不是最好的优化方案,要在适当的需求下、适当的环境中来使用表分区。

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: