高分急求答案!sql2008 数据库创建分区表,用分区表查询比用源表查询慢,求解
本帖最后由 zoulei2546 于 2012-12-19 19:22:12 编辑
我建立了分区函数和分区方案,middleclass是分区列,然后我又根据basemoney创建了索引不唯一非聚集索引,数据库里540w数据,下面我的测试结果
分区函数:
Sale_Main_Zone
我根据分区表去查询数据,如
select top 2000 * from Sale_Main where Eb80_Sale.$partition.Sale_Main_Zone(middleclass)=612
(2000 行受影响)
表 'Sale_Main'。扫描计数 1,逻辑读取 6147 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(5 行受影响)
(1 行受影响)
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 149 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
我想再加一个排序
select top 2000 * from Sale_Main where Eb80_Sale.$partition.Sale_Main_Zone(middleclass)=612 order by basemoney desc
(2000 行受影响)
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Sale_Main'。扫描计数 1,逻辑读取 15 次,物理读取 1 次,预读 2503 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(7 行受影响)
(1 行受影响)
SQL Server 执行时间:
CPU 时间 = 5968 毫秒,占用时间 = 21529 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
这样搜索,为什么还没有在普通表(即原始表)里搜索快,就如
select top 2000 * from Sale_Main where middleclass=5654
(2000 行受影响)
表 'Sale_Main'。扫描计数 1,逻辑读取 10606 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(3 行受影响)
(1 行受影响)
SQL Server 执行时间:
CPU 时间 = 78 毫秒,占用时间 = 197 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
对其进行排序:
select top 2000 * from Sale_Main where middleclass=5654 order by basemoney desc
(2000 行受影响)
表 'Sale_Main'。扫描计数 1,逻辑读取 74841 次,物理读取 2 次,预读 51 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(5 行受影响)
(1 行受影响)
SQL Server 执行时间:
CPU 时间 = 78 毫秒,占用时间 = 230 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
补充:
$partition.Sale_Main_Zone(mid