博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql-partition
阅读量:4967 次
发布时间:2019-06-12

本文共 1096 字,大约阅读时间需要 3 分钟。

表分区 partition

当一张表的数据非常多的时候,比如单个.myd文件都达到10G, 这时,必然读取起来效率降低.

可不可以把表的数据分开在几张表上?

 

1: 从业务角度可以解决. (分表)

比如, 通过id%10 , user0 , user1....user9, 这10张表

根据不同的余数,来插入或查询某张表.

 

2: 通过mysql的分区功能

mysql将会根据指定的规则,把数据放在不同的表文件上.

相当于在文件上,被拆成了小块.

但是,给客户的界面,还是1张表.

 

常用的规则:

根据某列的范围来分区, 也可以某列的散点值来分区.

 

示例: 按列的范围来分区

以用户表为例, uid

uid [1,10)  ---> user partition u0

uid[10, 20) ---> user partition u1

uid [20, MAX] --> user partion u2

 

分区 按range分区

create table goods ( id int, uname char(10) )engine myisam partition by range(id) ( partition p1 values less than (10), partition p2 values less than (20), partition p3 values less than MAXVALUE );

 

按散点值分区

有一张省表

pid 主键

prov 省名

1

北京

2

安徽

...

 

35

西藏

 

user 表,想按省来分区,

uid 主键

pid 省份

uname 用户名

1

1

张北京

15

2

赵安徽

 

 

 

 

create table user (uid int,pid int,uname )engine myisampartition by list(pid) (partition bj values in (1),partition ah values in (2),partition xb values in (4,5,6));

 

 

 

注意: 在使用分区的时候,注意,分区的那个列,值不要为NULL 

(如果不小心为NULL,mysql为理解为0,尽量执行之)

 

 

注 :分区甚至可以按照表达式的返回值,计算所属区. 

但用表达式,不如直接用值来得快. 根据情况而定.

 

比如,用 partition by range (year(regtime)) 可以按注册年份来分区.

 

转载于:https://www.cnblogs.com/phper007/p/3565179.html

你可能感兴趣的文章
MP3的播放与停止
查看>>
牛客(59)按之字形顺序打印二叉树
查看>>
JavaScript 图表库 xCharts
查看>>
Android项目的目录结构
查看>>
C++中“引用”的底层实现
查看>>
Spring Cloud与微服务构建:微服务简介
查看>>
Babel 是干什么的
查看>>
cocos2dx-3.0(8)------Label、LabelTTF、LabelAtlas、LabelBMFont使用之法
查看>>
CODE[VS] 1842 递归第一次
查看>>
20180418小测
查看>>
数字三角形
查看>>
NGUI 减少drawcall规则
查看>>
三元表达,匿名函数
查看>>
前端笔记-基础笔记
查看>>
【LeetCode & 剑指offer刷题】查找与排序题6:33. Search in Rotated Sorted Array(系列)
查看>>
GNU/Linux超级本ZaReason Ultralap 440体验
查看>>
将github上托管的代码 在我的域名下运行
查看>>
【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C】Equalize
查看>>
【codeforces 767A】Snacktower
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>