使用MySQL給表分割槽
阿新 • • 發佈:2020-08-25
一、使用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 NOTNULL 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 NOTNULL 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_
三、檢視分割槽是否建立成功
先向表中插入資料,然後執行如下語句:
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