• sqlserver-表分区


    最近对公司数据库性能方面改造。现已初建成效。

    公司原先数据库问题颇多,简单列举下:

    1.数据表文档缺失。

    2.数据库900多张表,接近一半都是备份和一些报表,没有分库处理

    3.大数量的表按照年份人工导出创建历史库

    4.字段类型存在滥用,毫无数据库优化

    如果有哪位兄弟不幸同命相连 ,说的寒心点,这基本就是个烂摊子。好在天下难事必作于细,一步一步优化。

    我的优化步骤是分析业务代码->补全数据库文档->改造业务系统->优化数据库->改造业务系统

    由于业务太过复杂,不易重做,所以还是采取比较悲催的做法。

    经过此次也算是个学习与实践的过程吧。

    使用表分区的场景:

    其实公司的数据量真不多,每年最多的数据就百来万,和上家根本没法比。但是由于数据库设计实在糟糕,查询性能简直不忍直视啊。

    除了建索引外,我还对对日期进行的分区处理。

    以下是用到的命令, 记录下备用

    --========================================
    -- 创建文件组

    选中数据库->属性->文件组->新建

    --========================================
    -- 创建表分区函数
    create partition function fnPartition (int) as Range right
    for values(100,200,300)

    select * from sys.partition_functions
    --========================================
    -- 创建表分区架构
    create partition scheme schemaforpartition
    as partition fnPartition
    to ([primary],[primary],[primary],[primary])
    select * from sys.partition_schemes

    --========================================
    -- 修改表分区
    alter table Base_User drop constraint PK_Base_User_UserID--删除现有表的主键(对有全文索引的只能再管理器中去除主键)
    ALTER TABLE [dbo].Base_User WITH NOCHECK ADD
    CONSTRAINT PK_Base_User_ID PRIMARY KEY CLUSTERED
    (
    [UserID]--注意ID这里是你原来的那些主键组成的列
    ) ON schemaforpartition ([UserID])--将主键创建到ps_Product_Scheme_mTb分区函数上

    SELECT *, $PARTITION.fnPartition([UserID]) AS PF FROM Base_User
    --=============================================
    -- 分割后多出来的分区存在在哪个文件组
    alter partition scheme schemaforpartition next Used 'primary'
    --添加分割点
    alter partition function fnPartition() split range (400)
    --=============================================
    --合并分割点
    alter partition function fnPartition() merge range (100)

    参考:

    http://kb.cnblogs.com/page/73921/

    http://www.cnblogs.com/sienpower/archive/2011/12/31/2308741.html

  • 相关阅读:
    Java对象序列化文件追加对象的问题,以及Java的读取多个对象的问题解决方法。
    解决chrome在docky上的图标模糊或不能锁定的问题
    获取表单中的输入内容、单选按钮、复选框的输入内容
    用idea写servlet文件
    get方法和post方法
    解决Only a type can be imported. com.mysql.jdbc.Connection resolves to a package的报错问题
    idea中如何配置tomcat
    JDBC中的PreparedStatement
    JDBC中的ResultSet
    JDBCl链接中Statement
  • 原文地址:https://www.cnblogs.com/yuanhuaming/p/4241301.html
Copyright © 2020-2023  润新知