zoukankan      html  css  js  c++  java
  • 使用MySQL给表分区

    一、使用Navicat创建分区

    1、打开Navicat,创建数据库,并点击创建表,选择选项

     2、创建分区

    注:在用字段时,需将字段设置为索引,且每个分区必须有取值 

    二、使用MySQL语句创建分区

    DROP TABLE IF EXISTS `caller_record`;
    CREATE TABLE `caller_record` (
      `uid` char(64) NOT NULL DEFAULT '' COMMENT 'uuid通过后台系统生成',
      `visitor_id` int(11) NOT NULL DEFAULT '0' COMMENT '拜访人id',
      `question_info_id` char(64) NOT NULL DEFAULT '' COMMENT '疫情问卷调查信息id(uuid)',
      `visitor_company_id` int(11) NOT NULL DEFAULT '0' COMMENT '拜访人所在公司id',
      `interviewee_id` int(11) NOT NULL DEFAULT '0' COMMENT '被拜访人id',
      `visitor_car_id` char(32) DEFAULT NULL COMMENT '拜访人车辆ID',
      `visit_time_start` datetime NOT NULL COMMENT '拜访开始时间',
      `visit_time_end` datetime NOT NULL COMMENT '拜访结束时间',
      `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '预约审批状态 0:未审批 1:已审批',
      `is_cancel` tinyint(1) NOT NULL DEFAULT '0' COMMENT '取消预约状态  0:未取消  1:已取消',
      `is_del` tinyint(1) NOT NULL DEFAULT '0' COMMENT '软删除 0:未删除 1:已删除',
      `create_time` datetime NOT NULL COMMENT '创建时间',
      `update_time` datetime NOT NULL COMMENT '更新时间',
      `remark` varchar(255) DEFAULT '' COMMENT '备注',
      PRIMARY KEY (`uid`,`create_time`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
    /*!50100 PARTITION BY LIST (MONTH(create_time))
    (PARTITION p1 VALUES IN (1) ENGINE = InnoDB,
     PARTITION p2 VALUES IN (2) ENGINE = InnoDB,
     PARTITION p3 VALUES IN (3) ENGINE = InnoDB,
     PARTITION p4 VALUES IN (4) ENGINE = InnoDB,
     PARTITION p5 VALUES IN (5) ENGINE = InnoDB,
     PARTITION p6 VALUES IN (6) ENGINE = InnoDB,
     PARTITION p7 VALUES IN (7) ENGINE = InnoDB,
     PARTITION p8 VALUES IN (8) ENGINE = InnoDB,
     PARTITION p9 VALUES IN (9) ENGINE = InnoDB,
     PARTITION p10 VALUES IN (10) ENGINE = InnoDB,
     PARTITION p11 VALUES IN (11) ENGINE = InnoDB,
     PARTITION p12 VALUES IN (12) ENGINE = InnoDB) */;

    注:若此方式报1055错误,原因是sql_mode设置中包含了“ONLY_FULL_GROUP_BY”,解决办法是在mysq配置文件my.cnf中添加sql_mode配置,去掉“ONLY_FULL_GROUP_BY”。

    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

    三、查看分区是否创建成功

     先向表中插入数据,然后执行如下语句:

    select 
      partition_name part,  
      partition_expression expr,  
      partition_description descr,  
      table_rows  
    from information_schema.partitions  where 
      table_schema = schema()  
      and table_name='表名字'; 

    若出现下图,则证明分区建立成功

    四、Mysql可用的分区函数

    DAY()
    DAYOFMONTH()
    DAYOFWEEK()
    DAYOFYEAR()
    DATEDIFF()
    EXTRACT()
    HOUR()
    MICROSECOND()
    MINUTE()
    MOD()
    MONTH()
    QUARTER()
    SECOND()
    TIME_TO_SEC()
    TO_DAYS()
    WEEKDAY()
    YEAR()
    YEARWEEK() 等

    五、分区类型


       Range:基于一个连续区间的列值,把多行分配给分区;
       LIST:列值匹配一个离散集合;
       Hash:基于用户定义的表达式的返回值选择分区,表达式对要插入表中的列值进行计算。这个函数可以包含SQL中有效的,产生非负整
                数值的任何表达式。
       KEY:类似于HASH分区,区别在于KEY 分区的表达式可以是一列或多列,且MYSQL提供自身的HASH函数。

    六、laravel中使用分区

    $employees = DB::select("SELECT * FROM employees PARTITION (p1)");
    dd($$employees);

    转载:https://blog.csdn.net/robin_sky/article/details/108227137

  • 相关阅读:
    投影变换 到 uv坐标 xy/w 齐次坐标
    GdiPlus[19]: IGPPathGradientBrush 之 SetCenterPoint
    GdiPlus[21]: IGPPathGradientBrush 之 InterpolationColors
    GdiPlus[24]: IGPPrivateFontCollection: 分别从文件和内存加载字体
    GdiPlus[23]: IGPFontFamily
    GdiPlus[25]: IGPInstalledFontCollection: 获取已安装的字体列表
    GdiPlus[20]: IGPPathGradientBrush 之 SetFocusScales
    GdiPlus[22]: IGPFont
    可爱的 CreateMessageDialog
    GdiPlus[18]: IGPPathGradientBrush 之 CenterColor、SurroundColors
  • 原文地址:https://www.cnblogs.com/yehuisir/p/13562044.html
Copyright © 2011-2022 走看看