MySQL中一些基础查询操作(适用于MariaDB)(二)
SELECT TABLE_NAME, DATA_LENGTH, INDEX_LENGTH, (DATA_LENGTH+INDEX_LENGTH) AS length, TABLE_ROWS, CONCAT(ROUND((DATA_LENGTH+INDEX_LENGTH)/1024/1024,3), 'MB') AS total_size FROM information_schema.TABLES WHERE TABLE_SCHEMA='database_name' ORDER BY length DESC;
执行查询的结果如下:
说明:
TABLE_NAME :表名字;
DATA_LENGTH : 数据大小;
INDEX_LENGTH :索引大小;
TABLE_ROWS : 记录数量;
TABLE_SCHEMA : 数据库名字;
ENGINE:所使用的存储引擎;
information_schema :是mysql自带的,它提供了访问数据库元数据的方式,元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。
一个表占用空间的大小,相当于是 数据大小 + 索引大小;
### 备份表操作步骤 ## 检查是否存在新表 DROP TABLE IF EXISTS tableName_20201010; ## 创建备份表 CREATE TABLE tableName_20201010 LIKE tableName; ## 查出数据并插入新表 INSERT INTO tableName_20201010 SELECT * FROM tableName;
测试效果:11W条记录,执行时间:2.048S
当然,可以使用这个作为分表的一个小技巧,例如按照月份来分表。
3、分区:
分区概念:
分区是根据一定的规则,数据库把一个表分解成多个更小的、更容易管理的部分。就访问数据库应用而言,逻辑上就只有一个表或者一个索引,但实际上这个表可能有N个物理分区对象组成,每个分区都是一个独立的对象,可以独立处理,可以作为表的一部分进行处理。分区对应用来说是完全透明的,不影响应用的业务逻辑。
分区版本支持:
+ MySQL数据库在5.1版本时添加了对分区的支持。
+ 在MySQL 5.6里面,分区的信息是在MySQL Server层维护的(在.par文件里面),InnoDB引擎层是不知道有分区这个概念的,InnoDB引擎层把每一个分区都当成一张普通的InnoDB表。在打开一个分区表时,会打开很多个分区,打开这些分区表就相当于打开了同等数量的InnoDB表,这需要更多内存存放InnoDB表的元数据和各种与ibd文件打开相关的各种cache与handler的信息。
+ 在MySQL 5.7里面,InnoDB引入了Native Partitioning,它把分区的信息从Server层移到了InnoDB层,打开一个分区表和打开一个InnoDB表的内存开销基本是一样的。
分区好处:
分区有利于管理非常大的表,它采用分而治之的逻辑,分区引入了分区键的概念,分区键用于根据某个区间值(或者范围值)、特定值列表或者hash函数值执行数据的聚集,让数据根据规则分布在不同的分区中,让一个大对象碧昂城一些小对象。
分区的对象:
MySQL分区即可以对数据进行分区也可以对索引进行分区。
分区类型:
+ range分区:基于一个给定的连续区间范围(区间要求连续并且不能重叠),把数据分配到不同的分区;常用分区类型。
+ list分区:类似于range分区,区别在于list分区是居于枚举出的值列表分区,range是基于给定的连续区间范围分区;常用分区类型。
+ hash分区:基于给定的分区个数,把数据分配到不同的分区。
+ key分区:类似于hash分区。
+ 子分区:
注意:无论哪种分区,要么你分区表上没有主键/唯一键,要么分区表的主键/唯一键都必须包含分区键,也就是说不能使用主键/唯一键字段之外的其它字段分区。
分表和分区的区别:
+ 水平分表需要用户预先手动显式创建出多张分表(如tbl_user0, tbl_user1, tbl_user2),在物理上实实在在的创建多张表,通过客户端代理(Sharding-JDBC等)或者中间件代理(Mycat等)来实现分表逻辑。
+ 分区是MySQL的一个插件Plugin功能,将一张大表的数据在数据库底层分成多个分区文件(如tbl_user#P#p0.ibd, tbl_user#P#p1.ibd, tbl_user#P#p2.ibd),和水平分表不同的是分区不需要显式的创建“分表”,数据库会自动创建分区文件的,用户看到的只是一张普通的表,其实是对应的是多个分区,这个是对用户是屏蔽的、透明的,在使用上和使用一张表完全一样,不需要借助任何功能来实现。分区是一种逻辑上的水平分表,在物理层面还是一张表。
您的资助是我最大的动力!
金额随意,欢迎来赏!
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮。
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【关注我】。
欢迎大家关注我的个人博客 Lycos | 小站 !由于最近没时间处理,原域名http://www.liuyuchuan.com暂时停止使用