使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM