RDS数据库优化设计系统

747 阅读5分钟
原文链接: mp.weixin.qq.com
RDS数据库优化设计系统 对于DBA来说,建表、建索引以及迁移表结构等等,可能就是小菜一碟,但是对开发、产品和测试等来说,可能就比较麻烦了。RDS数据库优化设计的目的就是解决这些问题的。

01

介绍

      RDS数据库优化设计系统是在wwwsqldesigner(一个图形化数据库设计工具)的基础上,修改、扩充很多功能得到的。前端界面使用VUE开发,后台是Django。

02

入口及权限

     首先如何进入RDS数据库优化设计呢?

      在RDS的数据库信息中,通过每个DB后面的优化设计按钮即可进入对应数据库DB的优化设计系统中。

      DBA用户可以进入任何RDS实例的任何DB,而其他人员只能进入自己所在组的RDS测试实例的DB。

03

详细介绍

      下图是RDS数据库优化设计系统的工作界面,主要由工作界面和右侧的菜单栏组成。类似于mysql workbench,提供了基本的新建、修改、删除表等功能,全部通过可视化操作。这一部分我们从表、列、索引三部分介绍

表功能

     新建一个表,默认会有一个id列和索引名为pk的主键,如下图

      双击表名或者点击修改表即可编辑表信息

      表名、注释等就不解释了,查询条件是用户输入常用的查询组合,我们稍后再讲。

      分区键是建分区表,目前只支持mysql的range类型

列功能

     双击要修改的列或者点击修改列,即可进入列编辑功能

      系统会根据用户进入的RDS实例类型自动调整列类型,目前只支持mysql与oracle数据库。

    mysql支持的类型如下

    oracle支持的类型如下

索引

      双击要修改的索引或者点击设置索引,即可进入索引编辑功能

     索引类型支持PRIMARY,INDEX,UNIQUE,FULLTEXT。此外还可通过建议功能来建立索引,即通过输入常用的查询条件生成索引。

     具体如下,首先我们新建一个包含多列的表Table2

      数据量10W,增长量1000。添加几个常用查询条件组合,添加的界面如下

      

      例如某些常用的sql中,where后面的组合为(col1,col2,col3),(col2,col3),(col2),添加后如下

      查询条件中出现的列需要选择列区分度,选项为唯一、高、中、低,我们全部选为中,确定后点击建议,即可生成索引

如上图,生成了一个col2,col3的组合索引。

生成索引大致规则为:

       查询条件中包含列区分度唯一或高的,随机选择区分度唯一或高的列建单列索引

       查询条件中不包含区分度唯一或高的列,选择其中区分度为中的所有列进行排列组合,得到此查询条件所有可能的索引。然后将所有查询条件的所有索引进行整合,相同索引或者满足最左前缀原则索引的相加,得到各个索引的累积查询频率总和以及在查询条件中出现的次数。最后按照查询频率总和、查询条件中出现的次数将所有索引排序,从中挑选出能够覆盖到所有查询条件的索引组合。

       索引建议会将表已有索引一并处理。

04

保存/载入

    此部分功能主要是为了满足开发中遇到的一些普遍需求

      对于一些相似的产品或者业务,其数据库中的表结构往往差异不是很大,这时候用户可以先编辑一份通用模版,保存到服务端。当开发相似产品时,只需要导入通用模版,并在模版上做少部分修改即可。

      如果要开发的新产品数据库表结构与线上某些业务的表结构很相似,但是又没有通用的模版,可以通过载入线上库来直接导入需要的表。

      例如需要开发一款保险类的新产品,可以直接将原先的线上保险数据库中的表结构导出

      另外我们还支持非同类型数据库的表结构导入。例如用户开发的新产品是在RDS的mysql实例上,而相似的产品业务数据库是在RDS的oracle实例上,这种情况也可以直接导入,RDS数据库优化设计系统会对列字段、索引自动进行转换。目前支持oracle与mysql数据库的互相转换,但也存在部分不支持的情况,例如oracle的函数索引等等。下图为在mysql数据库中导入oracle表

      还可以将工作内容转换为SQL

      服务端部分的测试、测试提交与强行提交是检测sql中是否存在不符合要求的问题。例如

结果显示需要为Table2填写表注释、id列要修改为int或bigint类型。

05

结尾

      数据库优化设计系统旨在方便非DBA用户操作,目前对某些功能的支持还不是特别完善,后续会根据用户反馈进行修补更新。

欢迎分享

网易乐得DBA组负责网易乐得电商、网易邮箱、网易技术部数据库日常运维, 负责数据库私有云平台的开发和维护,负责数据库及数据库中间件的开发和测试等,分享最前沿实用数据库干货,关注网易乐得DBA,精修数据库功底。

关注「网易乐得DBA」

了解前沿数据库技术