欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL分區(qū)表的使用

 更新時間:2024年10月14日 10:09:58   作者:何中應  
本文詳細介紹了在MySQL中創(chuàng)建分區(qū)表的方法和注意事項,包括Range和List兩種常見分區(qū)類型的具體操作流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

說明:分區(qū)表,顧名思義,就是一張表根據(jù)規(guī)則,劃分多個區(qū),通過分區(qū),實現(xiàn)一種“邏輯隔離”,這在Saas系統(tǒng)中是非常常見的。本文介紹如何在MySQL中分區(qū)。

創(chuàng)建分區(qū)

在MySQL中,多種分區(qū)模式,如下:

  • Range:范圍分區(qū),根據(jù)數(shù)據(jù)庫表某列數(shù)值劃分,像日期、數(shù)值類型的主鍵值;

  • List:列表分區(qū),可選定一個集合,像group_name字段,有淘寶、天貓,按照不同的集團名分區(qū);

  • Hash:哈希分區(qū);

  • Key:鍵分區(qū);

  • Subpartitioning:復合分區(qū);

這里介紹前面兩種常見的分區(qū),Range、List。

首先,創(chuàng)建兩張表,用戶表、集團表,如下:

CREATE TABLE `tb_user`
(
    `id`          int      NOT NULL AUTO_INCREMENT,
    `username`    varchar(20) DEFAULT NULL,
    `password`    varchar(20) DEFAULT NULL,
    `create_date` datetime NOT NULL,
    PRIMARY KEY (`id`, `create_date`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci COMMENT ='用戶表,range分區(qū)';
CREATE TABLE `tb_group` (
  `id` int NOT NULL AUTO_INCREMENT,
  `group_name` varchar(20) DEFAULT NULL,
  `group_code` varchar(20) NOT NULL COMMENT '集團編碼',
  PRIMARY KEY (`id`,`group_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='集團表,list分區(qū)';

需要注意

  • 創(chuàng)建分區(qū)表依靠的字段需要是主鍵或者聯(lián)合主鍵的其中一個

  • 而且,在創(chuàng)建分區(qū)后,依靠分區(qū)的字段不能修改名稱;

給用戶表創(chuàng)建分區(qū),根據(jù)創(chuàng)建時間(create_date)字段,如下:

-- 創(chuàng)建分區(qū)
alter table `tb_user`
    partition by range columns(create_date) (
        partition tb_user_1735660800000 values less than ('2025-01-01 00:00:00'),
        partition tb_user_1767196800000 values less than ('2026-01-01 00:00:00'));

這表示,創(chuàng)建時間在2025年內的記錄為一個分區(qū),大于2025年,小于2026年的在第二個分區(qū)。使用Range分區(qū)需要注意以下幾點:

  • Range分區(qū),嚴格遵循遞增分區(qū),后面分區(qū)的less than 不能小于上一個分區(qū);

  • Range分區(qū),數(shù)據(jù)會落在符合條件的第一個分區(qū),如2024年的數(shù)據(jù),會落到小于2025年的分區(qū)里,而不會落在小于2026年的分區(qū);

創(chuàng)建成功,插入兩條數(shù)據(jù)到用戶表里;

insert into tb_user(username, password, create_date)
values ('張三', '123456', now()),
       ('李四', 'abcdef', '2025-09-22 14:05:45')

敲下面的SQL,看下分區(qū)情況:

select partition_ordinal_position,
       partition_method,
       partition_expression,
       partition_description,
       table_name,
       table_rows
from information_schema.partitions
where table_name = 'tb_user';

可以看到tb_user有兩個分區(qū),分區(qū)的字段,數(shù)值,以及后面兩個分區(qū)各有一條記錄,說明上面插入的兩條記錄分到了兩個分區(qū)里。

(注:下面展示的是所有數(shù)據(jù)庫的tb_user表的分區(qū)情況,其他數(shù)據(jù)庫有重名的表,沒有重名的話,應該只有兩條記錄)

在這里插入圖片描述

再試下,List分區(qū),這次給tb_group創(chuàng)建一個分區(qū),如下:

-- 創(chuàng)建一個分區(qū)
alter table `tb_group`
    partition by list columns(group_code) (
        partition tb_group_001 values in ('001'));

表示,當記錄的集團編碼是001時,為一個分區(qū),下面再添加一個002分區(qū);

-- 添加一個分區(qū)
alter table tb_group
    add partition (partition tb_group_002 values in ('002'));

需要注意

  • 創(chuàng)建分區(qū)和新增分區(qū)的SQL是不相同的;

  • 而新增分區(qū)的前提,是這張表需要是一張分區(qū)表;

插入數(shù)據(jù)之前,先看一下分區(qū)情況,兩個分區(qū),都沒有記錄;

在這里插入圖片描述

插入數(shù)據(jù)

insert into tb_group(group_name, group_code)
values ('總公司', '001'),
       ('分公司', '002');

再看下分區(qū)情況,可以看到兩條數(shù)據(jù)被分到了不同分區(qū);

在這里插入圖片描述

如果我們插入一條數(shù)據(jù),集團編碼是003,即不在任何一個分區(qū)里面,會怎么樣,如下:

在這里插入圖片描述

會報錯,所以需要注意

  • 沒有符合條件的分區(qū),數(shù)據(jù)會插入失敗

刪除分區(qū)

刪除某張表的分區(qū),用下面的SQL

alter table tb_group drop partition tb_group_001;

表示,刪除tb_group表的tb_group_001分區(qū),需要注意,

  • 刪除分區(qū)后,所處分區(qū)的數(shù)據(jù)也會被刪除

  • 另外,不能刪除表的所有分區(qū),或者僅剩的一個分區(qū)

綜合前面的注意點,如果根據(jù)某個字段創(chuàng)建分區(qū),后續(xù)發(fā)現(xiàn)設計不合理,想再修改字段類型或者首個分區(qū)的范圍,只好刪表重建了,所以分區(qū)前要考慮清楚。

分區(qū)性能

這里創(chuàng)建一張有100萬條記錄的表,表結構如下

CREATE TABLE `test_user_1`(
	id INT auto_increment primary key ,
	username VARCHAR(32),
	`password` VARCHAR(32),
	sex VARCHAR(6)
);

用下面這個存儲過程,創(chuàng)建一百萬條記錄

-- 創(chuàng)建存儲過程
DELIMITER $$
CREATE PROCEDURE auto_insert()
BEGIN
    DECLARE i INT DEFAULT 1;
	START TRANSACTION;
    WHILE(i<1000000)DO
        INSERT INTO `test_user_1`(username, password, sex) VALUES(CONCAT('zhangsan',i) ,MD5(i), 'male');
        SET i=i+1;
    END WHILE;
	COMMIT;
END$$
DELIMITER ;

-- 調用
CALL auto_insert();

在這里插入圖片描述

劃分為10個分區(qū),每個分區(qū)存10萬條

在這里插入圖片描述

現(xiàn)在,來查詢一條記錄

select id, username, password, sex from test_user_1 where username='zhangsan500025';

1秒沒到

在這里插入圖片描述

現(xiàn)在,刪除表重建,這次不建分區(qū),再查一次,如下:

(沒有分區(qū))

在這里插入圖片描述

(1秒多點)

在這里插入圖片描述

老實說,我也不知道建立分區(qū)對查詢有沒有優(yōu)化,好像是有點……大家可以創(chuàng)建一千萬條記錄試下

總結

本文介紹了MySQL分區(qū),及創(chuàng)建分區(qū)時的一些注意點,匯總如下:

  • 創(chuàng)建分區(qū)表依靠的字段需要是主鍵或者聯(lián)合主鍵中的一個;

  • 創(chuàng)建分區(qū)后,依靠分區(qū)的字段不能修改名稱;

  • RANGE分區(qū),嚴格遵循遞增分區(qū),后面分區(qū)的less than 不能小于上一個分區(qū);

  • RANGE分區(qū),數(shù)據(jù)會落在符合條件的第一個分區(qū);

  • 創(chuàng)建分區(qū)和新增分區(qū)的SQL不同,新增分區(qū)的前提,是這張表需要是一張分區(qū)表;

  • 沒有符合條件的分區(qū),數(shù)據(jù)會插入失敗

  • 刪除分區(qū)后,所處分區(qū)的數(shù)據(jù)也會被刪除

  • 不能刪除表的所有分區(qū),或者僅剩的一個分區(qū)

到此這篇關于MySQL分區(qū)表的使用的文章就介紹到這了,更多相關MySQL分區(qū)表內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • MySQL修改innodb_data_file_path參數(shù)的一些注意事項

    MySQL修改innodb_data_file_path參數(shù)的一些注意事項

    這篇文章主要給大家介紹了關于MySQL修改innodb_data_file_path參數(shù)的一些注意事項,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • mysql中Load Data記錄換行問題的解決方法

    mysql中Load Data記錄換行問題的解決方法

    有關mysql中Load Data記錄換行的問題的解決方法, 需要的朋友可以參考下
    2013-02-02
  • mysql 大表批量刪除大量數(shù)據(jù)的實現(xiàn)方法

    mysql 大表批量刪除大量數(shù)據(jù)的實現(xiàn)方法

    這篇文章主要介紹了mysql 大表批量刪除大量數(shù)據(jù)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • MySQL數(shù)據(jù)處理梳理講解增刪改的操作

    MySQL數(shù)據(jù)處理梳理講解增刪改的操作

    本篇文章旨在介紹如何使用數(shù)據(jù)處理函數(shù),和其他大多數(shù)計算機語言語言,MYSQL支持利用函數(shù)來處理數(shù)據(jù),函數(shù)也就是一般在數(shù)據(jù)上執(zhí)行,它給數(shù)據(jù)的轉換和處理提供了方便
    2022-05-05
  • MySQL日志的詳細分析實例

    MySQL日志的詳細分析實例

    MySQL日志記錄了MySQL數(shù)據(jù)庫日常操作和錯誤信息,下面這篇文章主要給大家介紹了關于MySQL日志的詳細分析,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • MySQL創(chuàng)建用戶與授權及撤銷用戶權限方法

    MySQL創(chuàng)建用戶與授權及撤銷用戶權限方法

    這篇文章主要介紹了MySQL創(chuàng)建用戶并授權及撤銷用戶權限、設置與更改用戶密碼、刪除用戶等等,需要的朋友可以參考下
    2014-08-08
  • bitronix 連接 MySQL 出現(xiàn)MySQLSyntaxErrorException 的解決方法

    bitronix 連接 MySQL 出現(xiàn)MySQLSyntaxErrorException 的解決方法

    這篇文章主要介紹了bitronix 連接 MySQL 出現(xiàn)MySQLSyntaxErrorException 的解決方法的相關資料,需要的朋友可以參考下
    2017-04-04
  • 讓MySQL支持中文排序的實現(xiàn)方法

    讓MySQL支持中文排序的實現(xiàn)方法

    編繹MySQL時一般以ISO-8859字符集作為默認的字符集,因此在比較過程中中文編碼字符大小寫轉換造成了這種現(xiàn)象,一種解決方法是對于包含中文的字段加上"binary"屬性,使之作為二進制比較
    2011-11-11
  • mysql5.7.13.zip安裝教程(windows)

    mysql5.7.13.zip安裝教程(windows)

    這篇文章主要為大家詳細介紹了mysql5.7.13.zip安裝教程,以及在安裝mysql5.7.13.zip過程中遇到的問題,感興趣的小伙伴們可以參考一下
    2016-06-06
  • MySQL8.0修改Root密碼的方法步驟

    MySQL8.0修改Root密碼的方法步驟

    MySQL在初次安裝之后默認設置了root用戶的密碼,對于一些情況下需要修改root用戶密碼的操作,本文主要介紹了MySQL8.0修改Root密碼的方法步驟,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04

最新評論