mysql查询指定某个分区

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql查询指定某个分区相关的知识,希望对你有一定的参考价值。

参考技术A select * from table partition(fenquname);

Mysql分区表使?

?、什么是分区表

分区表就是按?定规则将?张表分割成多个部分,达到和物理分表同样的效果,但操作起来更简单,不同于物理分表那样使?时还需要指定使?的数据表。对于使?者来说和操作普通表?差别。

?、优势与限制

1、优势

  • 分区可以在?个表中存储?单个磁盘或?件系统分区上的数据更多的数据,因为我们可 以将分区表存储在不同物理磁盘上;
  • 对于?表数据,可以快速删除指定分区上的数据,效率?普通表delete?很多;
  • 查询的时候,如果where?句中包含分区列,则会减少IO,提升查询效率;
  • 对于?表尤其是innodb引擎的表,进?count()或sum()查询时,可以分区并?查询,提?效率。

2、限制

  • 如果分区字段中有主键或者唯?索引列,那么所有主键列和唯?索引列都必须包含进 来,如果表中有主键或唯?索引,那么分区键必须是主键或唯?索引;
  • 分区函数限制,?前mysql仅?持以下分区函数:ABS()、CEILING()、DATEDIFF()、 DAY()、DAYOFMONTH()、DAYOFWEEK()、DAYOFYEAR()、EXTRACT()、FLOOR()、 HOUR()、MICROSECOND()、MINUTE()、MOD()、MONTH()、QUARTER()、SECOND()、 TIME_TO_SEC()、TO_DAYS()、TO_SECONDS()、UNIX_TIMESTAMP()、WEEKDAY()、YEAR()、 YEARWEEK();
  • 所有分区上的数据库引擎要?致; ?张表可以设置8192个分区。

三、分区类型

1、RANGE分区

基于?个给定连续区间范围,把数据分配到不同的分区。

CREATE TABLE r1 (
a INT,
b INT
)
PARTITION BY RANGE (a) (
PARTITION p0 VALUES LESS THAN (5),
PARTITION p1 VALUES LESS THAN (MAXVALUE)
);

2、LIST分区

类似RANGE分区,区别在LIST分区是基于枚举出的值列表分区,RANGE是基于给定连续区间范 围分区。

CREATE TABLE customers_1 (
first_name VARCHAR(25),
last_name VARCHAR(25),
street_1 VARCHAR(30),
street_2 VARCHAR(30),
city VARCHAR(15),
renewal DATE
)
PARTITION BY LIST COLUMNS(city) (
PARTITION pRegion_1 VALUES IN(Oskarshamn, Högsby, Mönsterås),
PARTITION pRegion_2 VALUES IN(Vimmerby, Hultsfred, Västervik),
PARTITION pRegion_3 VALUES IN(Nässjö, Eksjö, Vetlanda),
PARTITION pRegion_4 VALUES IN(Uppvidinge, Alvesta, Växjo)
);

3、HASH分区

基于?户定义的表达式返回值来选择分区,该表达式对要插?到表的?中列值操作。

PS:表达式必须返回整型数据。

CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT 1970-01-01,
separated DATE NOT NULL DEFAULT 9999-12-31,
job_code INT,
store_id INT
)
PARTITION BY HASH(store_id)
PARTITIONS 4;

4、KEY分区

类似HASH分区,但是HASH分区允许使??户?定义表达式,?KEY分区不允许,它需要使? MySQL服务器提供的HASH函数,同时HASH分区只?持整数分区,?KEY分区?持除BLOB和 TEXT类型外其他列。

PS:KEY分区对列数据进?hash运算所以有时候数据分布会?常不均匀。如果不指定列,mysql会?动使?主键或者唯?健所在的列。

CREATE TABLE k1 (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20)
)
PARTITION BY KEY()
PARTITIONS 2;

 

以上是关于mysql查询指定某个分区的主要内容,如果未能解决你的问题,请参考以下文章

如何在mysql中查询以某个字符开头的表 如何在mysql中查询以某个字符开头的表

mysql怎么查询某个字段里的字符串?

Mysql 分区介绍 —— 分区管理

Mysql表分区状态查询

线上MySQL某个历史数据表的分区笔记

mysql GROUP_CONCAT 查询某个字段(查询结果默认逗号拼接)