MySQL分割数据
引言一般来说讲,提到数据拆分,可以归结为两个层面:一是垂直拆分,二是水平拆分。这里我们来讨论下垂直拆分。垂直拆分是以数据库、表、列等为单位进行拆分的方法。正文MySQL里垂直拆分可以细分为:垂直拆库(...
2024.11.15很多时候我们在设计数据库表结构的时候一般都是凭经验,或者根据业务的具体情况然后设定表字段的大小、类型等,那么有没有什么好的办法来帮助我们优化mysql数据库表结构呢?
一、Procedure AnalysePROCEDURE ANALYSE() ,在优化表结构时可以辅助参考分析语句。通过分析select查询结果对现有的表的每一列给出优化的建议。
利用此语句,MySQL 帮你去分析你的字段和其实际的数据,并会给你一些有用的建议。
【只有表中有实际的数据,这些建议才会变得有用,因为要做一些大的决定是需要有数据作为基础的。】
例如,如果你创建了一个 INT 字段作为你的主键,然而并没有太多的数据,那么,PROCEDURE ANALYSE()会建议你把这个字段的类型改成 MEDIUMINT 。或是你使用了一个 VARCHAR 字段,因为数据不多,你可能会得到一个让你把它改成 ENUM 的建议。这些建议,都是可能因为数据不够多,所以决策做得就不够准。
我们在设计表时有时候总会思考到底某个字段选用什么类型呢。其实我们在后期调优时也可以使用 procedure analyse();分析表结构看看mysql给我们的字段建议,综合实际情况调整一些字段的类型(这个已经很琐碎了,一般应用都到不了这么细,并且我们鉴于经验设计的数据库基本都能满足应用。
二、语法PROCEDURE ANALYSE的语法如下:
select ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])max_elements:指定每列非重复值的最大值,当超过这个值的时候,MySQL不会推荐enum类型。(默认值256)
max_memory (默认值8192)analyse()为每列找出所有非重复值所采用的最大内存大小。
执行返回中的Optimal_fieldtype列是mysql建议采用的列。
三、实例1、准备一张有数据的测试表
这里拿生产环境一张表来测试
mysql> show create table sys_user \G;2、结构分析
为以上表执行结构分析:
select * FROM SYS_USER PROCEDURE ANALYSE() \G;得到分析结果:
从以上表格可以看出,分析出了字段最小值,最大值,最小长度,最大长度,还有最后Optimal_fieldtype代表了表结构建议,
3、优化调整
可以根据数据分析建议来修改表结构,使之更符合数据存储规范。
总结从上面这个例子我们可以看出analyze能根据目前表中的数据情况给出优化建议。当数据库在生产环境运行一定时间以后,开发或是DBA能参考analyze的分析结果来对表结构做出一定的优化。
后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~
引言一般来说讲,提到数据拆分,可以归结为两个层面:一是垂直拆分,二是水平拆分。这里我们来讨论下垂直拆分。垂直拆分是以数据库、表、列等为单位进行拆分的方法。正文MySQL里垂直拆分可以细分为:垂直拆库(...
2024.11.15#查找锁mysql> show OPEN TABLES where In_use > 0;#查询是否锁表mysql> show processlist #查询表被锁进程mysql> show engi...
2024.11.15最近因需求改动新增了一些数据库表,但是在定义表结构时,具体列属性的选择有些不知其所以然,索引的添加也有遗漏和不规范的地方,所以我打算为创建一个高性能表的过程以实战的形式写一个专题,以此来学习和巩固这些...
2024.11.15概述今天主要看下innodb是怎么去设计主键索引的,这里引用了一个淘宝MySQL数据库经典案例。innodb 主键索引在Innodb中,聚簇索引默认就是主键索引。如果没有主键,则按照下列规则来建聚簇索...
2024.11.10一、数据库的增、删、改创建数据库:create database 库名; 或者加入字符集和排序规则 create database t_aouto default charset utf8 colla...
2024.11.15