• Sql Server 2005 实现Oracle 10g 的hash表分区功能


         最近学习Oracle中,在其有hash表分区功能,就在想sql server 有类似分区吗,查了一些资料,发现没有介绍,在2005中目前只支持列表和范围分区。

         以前只知道Sql Server有hash索引,本文就在Sql Server中实现Oracle里的hash表分区。oracle 10ghash分区保持分区数据的均匀,分的区个数是2的倍数分区才可以实现。

    前段时间做了一个试验,实现了在sql server 2005的分区并保证了在hash分区中数据的分布均匀。

     

    现在我们看具体实例:

     

    Hash分区:将表数据均匀的分成4个区。

     

    建立分区函数:数据如何分区(逻辑设计)

    CREATE PARTITION FUNCTION [zping.com.PF](int) AS

    RANGE LEFT FOR VALUES (-1073741824, 0, 1073741824)

     

    注意:我们这里使用的int型数据,因为hash函数是checksumid),这里根据int的最大长度进行分区,我们使用2,147,483,648/2=1073741824

    这里:Range left 意思: <=

          Range right 意思: < 

    创建分区方案:分区数据如何物理存放(逻辑设计)

    CREATE PARTITION SCHEME [zping.com.Ps] AS PARTITION [zping.com.PF] all TO ([PRIMARY])

     

    这里的all TO ([PRIMARY]) 意思是将分区数据将存储于主文件组中

     

    建立分区表:

    CREATE TABLE [dbo].[zping.com](

        [id] [varchar](32) NOT NULL,

        [sid] int,

        [hashid] AS (checksum([id])) PERSISTED

    )

    ON [zping.com.Ps] ([hashid])

    注意:1,这里我们使用了计算列的做为分区列,在SQL server 2005中,分区列如果是计算列,必须PERSISTED持久化

        2,我们这里使用了checksum()这个哈希函数,该函数用来计算idhash值,这个函数同时可以用来建立hash索引

      

    插入1万条测试数据:

    insert into [zping.com](id,sid)

    select replace(newid(),'-',''),

    from (select top 100 * from syscolumns) a

    ,(select top 100 * from syscolumns) b

    查看数据的分布分区情况:

    SELECT 

        $partition.[zping.com.PF](hashid)

           AS 分区号,count(*) 数据条数

    FROM [zping.com]

    group by $partition.[zping.com.PF](hashid)

    查看结果

      这时发现,数据分布的比较均匀。按上面方法再插入1万条数据,看看数据分区:

    这时发现数据依旧比较均匀。

    这里我们完成了一个SQL server 2005的hash分区。

    建立hash分区的好处:

    1,提高可伸缩性和可管理性:在SQL server 2005中建立hash分区, 改善大型表以及具有各种访问模式的表的可伸缩性和可管理性。

    2,提高性能,

       2.1,只有将数据分区分到不同的磁盘上,才会有较大的提升。

       2.2. 因为在运行涉及表间联接的查询时,多个磁头可以同时读取数据

  • 相关阅读:
    ABP 使用ElasticSearch、Kibana、Docker 进行日志收集
    Team Foundation Server 2005单服务器版本部署指南
    Echarts 3D地图下钻
    响应式图像与优化
    字节一面:go的协程相比线程,轻量在哪?
    Gopher必读:HttpClient的两个坑位
    客户端禁用Keepalive, 服务端开启Keepalive,会怎么样?
    自古以来,JSON序列化就是兵家必争之地
    Go的优雅终止姿势
    推荐一个好用的浏览器笔记工具
  • 原文地址:https://www.cnblogs.com/zping/p/1252743.html
Copyright © 2020-2023  润新知