
- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 特性
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授予許可權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者賬戶
- MySQL - 解鎖使用者賬戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 截斷表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖定
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - 插入查詢
- MySQL - 選擇查詢
- MySQL - 更新查詢
- MySQL - 刪除查詢
- MySQL - 替換查詢
- MySQL - 插入忽略
- MySQL - 插入重複鍵更新
- MySQL - 插入到選擇
- MySQL 運算子和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - LIKE 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - 不等於運算子
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - BETWEEN 運算子
- MySQL - UNION 運算子
- MySQL - UNION 與 UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自連線
- MySQL - 刪除連線
- MySQL - 更新連線
- MySQL - UNION 與 JOIN
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - 插入前觸發器
- MySQL - 插入後觸發器
- MySQL - 更新前觸發器
- MySQL - 更新後觸發器
- MySQL - 刪除前觸發器
- MySQL - 刪除後觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式和運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數值函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 雜項概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複項
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - 檢查約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入到資料庫
- MySQL - UUID
- MySQL - 公共表表達式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - 訊號
- MySQL - 重新發送訊號
- MySQL - 字元集
- MySQL - 校對
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 當天日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - EXPLAIN
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - 顯示程序列表
- MySQL - 更改列型別
- MySQL - 重置自動遞增
- MySQL - Coalesce() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - 垂直分割槽
MySQL 的**分割槽**用於將大型表劃分為儲存在不同物理位置的較小分割槽,並將其視為單獨的表。即使這些較小的分割槽是單獨管理的,它們仍然是主表的一部分。
MySQL 中有兩種分割槽形式:**水平分割槽**和**垂直分割槽**。
MySQL 垂直分割槽
MySQL 的**垂直分割槽**根據列而不是行將表劃分為多個表。
MySQL 中有兩種主要的垂直分割槽型別,每種型別都用於特定的目的:
- 範圍列分割槽
- 列表列分割槽
範圍列分割槽和列表列分割槽都支援各種資料型別,包括整數型別(TINYINT、SMALLINT、MEDIUMINT、INT 和 BIGINT)、字串型別(CHAR、VARCHAR、BINARY 和 VARBINARY),以及 DATE 和 DATETIME 資料型別。
範圍列分割槽
MySQL 範圍列分割槽使用一個或多個列作為分割槽鍵,根據定義的列值範圍將資料劃分為分割槽。
這些列中的值與預定義的範圍進行比較,並且每行都分配到包含其列值的範圍的分割槽。
示例
在以下查詢中,我們建立一個名為**INVENTORY**的表,並根據“product_quantity”和“product_price”列將其劃分為三個分割槽。具有這些列中特定值的行儲存在其相應的分割槽中:
CREATE TABLE INVENTORY ( id INT, product_name VARCHAR(50), product_quantity INT, product_price int ) PARTITION BY RANGE COLUMNS(product_quantity, product_price) ( PARTITION P_low_stock VALUES LESS THAN (10, 100), PARTITION P_medium_stock VALUES LESS THAN (50, 500), PARTITION P_high_stock VALUES LESS THAN (200, 1200) );
在這裡,我們將行插入到上面建立的表中:
INSERT INTO INVENTORY VALUES (1, 'Headphones', 5, 50), (2, 'Mouse', 15, 200), (3, 'Monitor', 30, 300), (4, 'Keyboard', 60, 600), (5, 'CPU', 100, 1000);
以下是獲得的**INVENTORY**表:
id | product_name | product_quantity | product_price |
---|---|---|---|
1 | 耳機 | 5 | 50 |
2 | 滑鼠 | 15 | 200 |
3 | 顯示器 | 30 | 300 |
4 | 鍵盤 | 60 | 600 |
5 | CPU | 100 | 1000 |
現在,我們在 INVENTORY 表中有一些資料,我們可以使用以下查詢顯示分割槽狀態以檢視資料如何在分割槽之間分佈:
SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='inventory';
您將在下面的輸出中看到,各個列根據定義的範圍值分配到它們各自的分割槽:
PARTITION_NAME | TABLE_ROWS |
---|---|
P_high_stock | 2 |
P_low_stock | 1 |
P_medium_stock | 2 |
顯示分割槽:
我們還可以使用 PARTITION 子句顯示來自特定分割槽的資料。例如,要檢索來自分割槽 P_high_stock 的資料,我們使用以下查詢:
SELECT * FROM inventory PARTITION (P_high_stock);
它將顯示分割槽 P_high_stock 中的所有記錄:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
4 | 鍵盤 | 60 | 600 | |
5 | CPU | 100 | 1000 |
同樣,我們可以使用相同的語法顯示其他分割槽。
列表列分割槽
MySQL 列表列分割槽使用一個或多個列作為分割槽鍵,並根據這些列中的特定值將記錄分配到分割槽。當您希望根據離散值或類別將資料分組到分割槽時,此方法非常方便。
示例
讓我們建立一個名為“EMPLOYEES”的表,並使用基於“department”列的列表列分割槽對其進行分割槽:
CREATE TABLE EMPLOYEES ( id INT, first_name VARCHAR(50), last_name VARCHAR(50), hiring_date DATE, department VARCHAR(50) ) PARTITION BY LIST COLUMNS(department) ( PARTITION p_sales VALUES IN ('Sales', 'Marketing'), PARTITION p_engineering VALUES IN ('Engineering', 'Research'), PARTITION p_operations VALUES IN ('Operations') );
在這裡,我們將記錄插入到上面建立的表中:
INSERT INTO EMPLOYEES VALUES (1, 'John', 'Doe', '2020-01-01', 'Sales'), (2, 'Jane', 'Doe', '2020-02-01', 'Marketing'), (3, 'Bob', 'Smith', '2020-03-01', 'Engineering'), (4, 'Alice', 'Johnson', '2020-04-01', 'Research'), (5, 'Mike', 'Brown', '2020-05-01', 'Operations');
以下是獲得的 EMPLOYEES 表:
id | first_name | last_name | hiring_date | department |
---|---|---|---|---|
1 | John | Doe | 2020-01-01 | 銷售部 |
2 | Jane | Doe | 2020-02-01 | 市場部 |
3 | Bob | Smith | 2020-03-01 | 工程部 |
4 | Alice | Johnson | 2020-04-01 | 研發部 |
5 | Mike | Brown | 2020-05-01 | 運營部 |
我們可以使用以下查詢顯示 EMPLOYEES 表的分割槽狀態以檢視資料如何在分割槽之間分佈:
SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='EMPLOYEES';
它將顯示分割槽以及根據部門值在每個分割槽中的行數:
PARTITION_NAME | TABLE_ROWS |
---|---|
p_engineering | 2 |
p_operations | 1 |
p_sales | 2 |