#### list分區
list :條件值為一個數據列表。
算法 :
~~~
根據"字段的內容值"是否在某個"列表"中進行分區,通過預定義的列表的值來對數據進行分割。
~~~
例:
假如你創建一個如下的一個表,該表保存有全國20家分公司的職員記錄,這20家分公司的編號從1到20.而這20家分公司分布在全國4個區域,如下表所示:
職員表 :
~~~
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(32) | YES | | NULL | |
| store_id | int(11) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
~~~
分區信息
~~~
北部 1,4,5,6,17,18
南部 2,7,9,10,11,13
東部 3,12,19,20
西部 8,14,15,16
~~~
建表語法 :
~~~
create table p_list(
id int,
name varchar(32),
store_id int
)engine innodb charset utf8
partition by list (store_id)( //分區字段 store_id
partition p_north values in (1,4,5,6,17,18),
partition p_east values in(2,7,9,10,11,13),
partition p_south values in(3,12,19,20),
partition p_west values in(8,14,15,16)
);
~~~
分區文件信息

#### 查詢測試
語法:
~~~
explain partitions select * from 表名 where 分區字段 = 條件\G
~~~
結果:
~~~
id: 1
select_type: SIMPLE
table: p_list
partitions: p_east //使用到了分區
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 1
filtered: 100.00
Extra: Using where
~~~
不使用分區字段作為條件進行查詢
~~~
explain partitions select * from 表名 where 其他字段 = 條件\G
~~~
結果
~~~
id: 1
select_type: SIMPLE
table: p_list
partitions: p_north,p_east,p_south,p_west //查找了所有分區
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 3
filtered: 33.33
Extra: Using where
~~~
**注意**:在使用分區時,where后面的字段必須是分區字段,才能使用到分區.
- MySQL優化概述
- 存儲引擎的選擇
- innodb引擎
- myisam引擎
- memory引擎
- 查詢需優化語句
- 通用查詢日志
- 慢查詢日志
- profile機制
- 索引
- 索引基本介紹
- 索引類型
- 索引管理語法
- 創建索引主要事項
- 執行計劃
- 查看索引類型
- myisam索引數據結構
- innodb索引數據結構
- 索引覆蓋
- 索引使用原則
- 列獨立
- like查詢
- 復合索引使用
- or運算都具有索引
- mysql智能選擇
- 優化group by語句
- 前綴索引
- 全文索引
- 查詢緩存
- 查詢緩存操作
- 無緩存
- limit分頁優化
- 分區
- 分區介紹
- list分區
- range分區
- hash分區
- key(鍵值)分區
- 分區管理
- 分表
- 分表介紹
- 水平分表
- 垂直分表
- MySQL鎖機制
- 鎖機制介紹
- 鎖的幾種形式
- 表鎖操作
- 行鎖操作
- 數據碎片與維護
- 范式
- 第一范式
- 第二范式
- 第三范式
- 反三范式
- 主從復制
- 介紹
- 讀寫分離