问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

mysql数据库partition分区的sql怎么写

发布网友 发布时间:2022-04-09 05:31

我来回答

2个回答

懂视网 时间:2022-04-09 09:52

前言:当一个表里面存储的数据特别多的时候,比如单个.myd数据都已经达到10G了的话,必然导致读取的效率很低,这个时候我们可以采用把数据分到几张表里面来解决问题。
方式一:通过业务逻辑根据数据的大小通过id%10这种来分成 user1,user2,user3等这样的,但是这样会有很多问题我们需要维护这样一个hash关系,

而且每次读取数据和写入数据的时候还要去判断取那张表,这个是我们通过程序去识别写表和读表的。
方式二:mysql可以通过partition进行分区,这种分区显示给我们的数据依然都是在一个数据表里面的,不影响我们读取查询数据,

而是mysql内部的文件机制实现了将数据存储在不同的数据文件里,这样的好处是mysql自动将对应的数据分到的不同的.myd文件里面去

了大大降低了文件的大小,将数据分摊了,很好的提高了效率。

 

今天分析的是方式二利用mysql的partition进行分区

该列子数据库名:test
mysql安装路径:/data/local/mysql/
mysql的partition分区又分为两种:按照范围分区(range),按照散列分区(list)

一:按照范围实现分区

mysql> create table topic(

    -> tid int(4) primary key auto_increment,

    -> title char(20) not null default ‘‘)

    -> engine=myisam default charset=utf8

    -> partition by range(tid)(

    -> partition test0 values less than(10),

    -> partition test1 values less than(20),

    -> partition test2 values less than(maxvalue));

Query OK, 0 rows affected (0.05 sec)


进入test数据库的文件目录查看生成的文件
ls  -all  /data/local/mysql/data/test/
特别需要注意文件类型为.MYD的这里存储的是数据

-rw-rw---- 1 mysql mysql  8590 May 10 01:27 topic.frm

-rw-rw---- 1 mysql mysql    40 May 10 01:27 topic.par

-rw-rw---- 1 mysql mysql     0 May 10 20:13 topic#P#test0.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 20:13 topic#P#test0.MYI

-rw-rw---- 1 mysql mysql     0 May 10 20:13 topic#P#test1.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 20:13 topic#P#test1.MYI

-rw-rw---- 1 mysql mysql     0 May 10 20:13 topic#P#test2.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 20:13 topic#P#test2.MYI

我们加入一些数据看看效果

mysql> insert into topic(`title`) values(‘a‘);

Query OK, 1 row affected (0.00 sec)


-rw-rw---- 1 mysql mysql  8660 May  6 23:52 t.frm

-rw-rw---- 1 mysql mysql   192 May  6 23:52 t.MYD

-rw-rw---- 1 mysql mysql  2048 May  6 23:52 t.MYI

-rw-rw---- 1 mysql mysql  8590 May 10 01:27 topic.frm

-rw-rw---- 1 mysql mysql    40 May 10 01:27 topic.par

-rw-rw---- 1 mysql mysql    65 May 10 20:16 topic#P#test0.MYD

-rw-rw---- 1 mysql mysql  2048 May 10 20:16 topic#P#test0.MYI

-rw-rw---- 1 mysql mysql     0 May 10 20:13 topic#P#test1.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 20:13 topic#P#test1.MYI

-rw-rw---- 1 mysql mysql     0 May 10 20:13 topic#P#test2.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 20:13 topic#P#test2.MYI

发现 topic#P#test0.MYD文件大小增加了说明数据写入到了 topic#P#test0.MYD也就是写入到了分区我们之前创建的test0分区里面去了

我们现在再插入一条数据看下情况

mysql> insert into topic(`tid`,`title`) values(11,‘h‘);

Query OK, 1 row affected (0.00 sec)

-rw-rw---- 1 mysql mysql  8590 May 10 01:27 topic.frm

-rw-rw---- 1 mysql mysql    40 May 10 01:27 topic.par

-rw-rw---- 1 mysql mysql    65 May 10 20:16 topic#P#test0.MYD

-rw-rw---- 1 mysql mysql  2048 May 10 20:16 topic#P#test0.MYI

-rw-rw---- 1 mysql mysql    65 May 10 20:18 topic#P#test1.MYD

-rw-rw---- 1 mysql mysql  2048 May 10 20:18 topic#P#test1.MYI

-rw-rw---- 1 mysql mysql     0 May 10 20:13 topic#P#test2.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 20:13 topic#P#test2.MYI
插入了一条id为11的数据发现topic#P#test1.MYD的文件大小增加了说明数据写入到了分区为test1里面去了

我们查询下数据表里的数据看一下

 

mysql> select * from topic;

+-----+-------+

| tid | title |

+-----+-------+

|   1 | a     |

|  11 | h     |

+-----+-------+

2 rows in set (0.00 sec)

说明:mysql的partition按照范围(range)分区,是以某个字段的id(为int类型)的 范围来写入到对应范围的分区里面去的。

 

二:按照散列的点进行分区
    

mysql> create table area(

    -> uid int(10),

    -> uname char(6),

    -> aid int)

    -> engine=myisam charset utf8

    -> partition by list(aid)(

    -> partition hb values in (1),

    -> partition hn values in (2),

    -> partition gd values in (3),

    -> partition gx values in (4));

Query OK, 0 rows affected (0.01 sec)

查看生成的文件信息
ls  -all  /data/local/mysql/data/test/

 

-rw-rw---- 1 mysql mysql  8618 May 10 19:52 area.frm

-rw-rw---- 1 mysql mysql    32 May 10 19:52 area.par

-rw-rw---- 1 mysql mysql     0 May 10 19:52 area#P#gd.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 19:52 area#P#gd.MYI

-rw-rw---- 1 mysql mysql     0 May 10 19:52 area#P#gx.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 19:52 area#P#gx.MYI

-rw-rw---- 1 mysql mysql     0 May 10 19:52 area#P#hb.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 19:52 area#P#hb.MYI

-rw-rw---- 1 mysql mysql     0 May 10 19:52 area#P#hn.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 19:52 area#P#hn.MYI

我们插入一条来自湖北的用户信息

mysql> insert into `area` (`uname`,`aid`) values(‘东子‘,1);

Query OK, 1 row affected (0.00 sec)

我们再来查看信息发现area#P#hb.MYD的文件写入了数据

-rw-rw---- 1 mysql mysql  8618 May 10 19:52 area.frm

-rw-rw---- 1 mysql mysql    32 May 10 19:52 area.par

-rw-rw---- 1 mysql mysql     0 May 10 19:52 area#P#gd.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 19:52 area#P#gd.MYI

-rw-rw---- 1 mysql mysql     0 May 10 19:52 area#P#gx.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 19:52 area#P#gx.MYI

-rw-rw---- 1 mysql mysql    27 May 10 20:03 area#P#hb.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 20:03 area#P#hb.MYI

-rw-rw---- 1 mysql mysql     0 May 10 19:52 area#P#hn.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 19:52 area#P#hn.MYI

我们再插入一条湖南人的信息

mysql> insert into `area` (`uname`,`aid`) values(‘lxm‘,2);

Query OK, 1 row affected (0.00 sec)

 

插入后我们发现area#P#hn.MYD文件的大小增加了说明写入了数据

-rw-rw---- 1 mysql mysql  8618 May 10 19:52 area.frm

-rw-rw---- 1 mysql mysql    32 May 10 19:52 area.par

-rw-rw---- 1 mysql mysql     0 May 10 19:52 area#P#gd.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 19:52 area#P#gd.MYI

-rw-rw---- 1 mysql mysql     0 May 10 19:52 area#P#gx.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 19:52 area#P#gx.MYI

-rw-rw---- 1 mysql mysql    27 May 10 20:03 area#P#hb.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 20:03 area#P#hb.MYI

-rw-rw---- 1 mysql mysql    27 May 10 20:06 area#P#hn.MYD

-rw-rw---- 1 mysql mysql  1024 May 10 20:06 area#P#hn.MYI

查看一下表里面的数据

mysql> select * from area;

+------+--------+------+

| uid  | uname  | aid  |

+------+--------+------+

| NULL | 东子   |    1 |

| NULL | lxm    |    2 |

+------+--------+------+

2 rows in set (0.00 sec)
说明:按照散列的点进行分区,是根据插入信息的关联的一个id字段来自动写入对应的分区数据文件的,从而实现了表的分区。

 

mysql的partition分区

标签:

热心网友 时间:2022-04-09 07:00

sql语句和平常一样,不用指定分区查,以前怎么写,分区后还怎么写,mysql自动查找分区里的数据。
mysql分片,表关联查询的sql怎么写

5. 然后求分片索引值与起始日期的差:如果分片索引值不早于 sBeginDate(哪怕晚于 sEndDate),就以 MySQL 分片承载的天数为模数,对分片索引值求模得到所属分片;如果分片索引值早于 sBeginDate,就会被放到 defaultNode 分片上 与MyCat的类似分片算法对比 中间件 DBLE MyCat 分片算法种类 date 分...

mysql 数据库中、根据4个级别查询、(管理处parent_id=0、小区=1、楼栋...

你必须输入查询条件为楼栋2的名称,那么查找语句就很简单,select district _name form tablename where id = (select parent_id from tablename where distict_name = "") union select district _name from table name where parent_id = (select id from tablename where distict_name ="" )...

mysql SQL语句如何将sum()放在where后面做条件怎么写呢?

方法如下 写入语句:“select col1,sum(cols2) from table_name group by col1 having sum(col2)>100”写入语句可以用where,having代表查询按照col1分组后,sum(col2)大于100。SQL即结构化查询语言,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关...

数据库是mysql,sql该怎么写

select t1.id, t1.name, t2.goodsid, t2.number from t1 left join t2 on t1.id=t2.id

mysql已经使用的表还能分区吗,因为商品表里的数据太多,想分区,不知 ...

然后把查出来的数据批量插入新建的表中。这样是比较好操作的,如果要强制分区的话,建议你先建立一个备份的数据库,或者先建一个测试表,测试以下代码:下面的SQL,将p2010Q1 分区,拆分为s2009 与s2010 两个分区 mysql> ALTER TABLE sale_data REORGANIZE PARTITION p2010Q1 INTO (-> PARTITION...

MySQL之KEY分区引发的血案

如下图所示,是笔者把分区数调整为127并插入100w数据后的情况,通过SQL证明每个分区的数据量几乎一样:MySQL的KEY分区这么大的使用陷阱,居然在官方上没有任何说明,这让笔者感到非常震惊。笔者还尝试Google搜索 mysql partition key uneven ,也有很多结果,例如 stackoverflow:https://stackoverflow.com/...

查询MYSQL同一个数据库2张表的不同字段值语句怎么写

查询两张表的不同字段,一般通过连接(JOIN)来实现,需要两张表有能够相互关联的字段。如果没有任何关联字段,直接查两个字段的话,就会出现笛卡尔积(结果为T1和T2字段的集合,结果条数为T1*T2)。假设你的需求是两张表有关联字段ID,以内连接为例,则SQL可以写为:SELECT T1.C1,T2.C2 FROM T1 ...

mysql 数据库 把一个表的每3行里同一个项目,变成一行3个项目。sql文怎 ...

slect c.字段,d.字段 from (select a.字段,b.字段 from A表 left join b表 on a.id=b.id) as c left join c.id=d.id 先把2个表进行关联 在跟第3个表关联

mysql中查询数据库中表名称和结构的sql语句是什么啊啊

示例 1 简单的建一张很小的表 y1,记录数为 10 条。表 t1,插入 10 条记录 mysql-(ytt/3305)->create table t1 (r1 int,r2 int);Query OK, 0 rows affected (0.02 sec)mysql-(ytt/3305)->insert into t1 with recursive aa(a,b) as (select 1,1 union all select a+1,ceil(...

...+spring+Extjs),mysql数据库,请问sql语句怎么写

mysql里面可以使用limit关键字来进行从第n条开始查询m条记录。这个应该是你分页想要的吧,具体的格式如下:select * from tablename limit n,m;查询表里面从第n-1条记录开始的m条记录。这里的n是从0开始计数的,如果是从第一条开始查询,则可以省略n。

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
几何e值得买吗 我英语80分左右总是上不去(100分满分)怎么办... 刚绣好的十字绣怎么洗?画过格的 台州温岭第一人民医院有儿科吗 北山职业技术学校有哪些专业? 在温岭市找一份夜里兼职的驶机工作我现白天在厂里开车,想多收入,找... ...网线连接了客厅的路由器再连接到电脑上,卧室用的是和客厅路由器分... ...器放在客厅看电视用,卧室里面我还得再牵一根网线怎么办? ...台式 路由器在客厅距离太远拉网线不方便 卧室里有网线插口 卧室的网 ... 在临海社保缴费了一年后离开没办转移,去宁波参加社保 后又回临海参加社... 寒假和女朋友到贵阳旅游,青岩古镇有什么更新的玩法? 贵阳青岩古镇有什么可以带走的那种小吃?主要是买点儿给朋友家人带回去 谢谢了 苹果手机只要不下载恶意软件、视频、文件就不会中木马吗? 苹果手机不下载木马就不会中木马吗? 贵阳古镇有哪些?除了青岩古镇还有两个不知名的古镇,哪两个古镇呢? 苹果手机是要下载木马才会中木马吗?没下载就不会吗? 苹果手机浏览了可能被黑客攻击了的网站,还看了里面的视频,这会中木马吗?没越狱 11月份去青岩古镇都有什么好玩的? 苹果手机只要不下载恶意软件就不会中木马吗?浏览风险网站也不会吗? 苹果手机干什么会中木马,中木马的途径有什么? 苹果手机进了一个浏览器提示的可能被黑客攻击了的网站,还看了里面的视频,这会中木马吗? 贵阳为什么叫避暑之都? 微信开放社区提问如何删除微信开放社区提问如何删除 09舞林盛典开场音乐 我在湖南株洲这边,想去一些古镇旅游,,请问有哪些地方不是很远,又会很好玩呢,,谢谢哦。。。 淘米水洗头到底是发酵好还是用新鲜的好? 微信开发者社区的微信开发现状 猪肉蒸几分钟熟 新生儿感冒发烧怎么办,护理方面做好这些 关于fido的免费接听 亲们小米3移动版怎么样?值得买吗?(用过的说下) 河北三河燕郊镇的人口和GDP是多少?霸州胜芳镇的人口和GDP是多少? 胜芳为什么比霸州有钱 河北省廊坊市的哪个镇最富有 胜芳镇在中国镇级里面排第几 河北胜芳和霸州是不是同一级别 形容一个人特别忙的成语 描写一个人很忙的句子有哪些? 河北的霸州市为什么那么穷 评价一个人很忙,用哪一个成语形容 胜芳几线城市 河北省廊坊市霸州市的人均GDP是多少?注:是霸州市的人均GDP。 形容一个人忙的俏皮话有哪些? 现在胜芳古镇有多少人口 形容忙碌的词语2个字 胜芳镇属于哪个县 形容人很忙的词语 请问霸州市的支柱产业是什么? 胜芳多大 描写一个人很忙的句子
  • 焦点

最新推荐

猜你喜欢

热门推荐