MYSQL-生产环境中的数据库的表和规范

01、目标

了解和掌握生产环境中的数据库的表和规范

02、分析

基础规范

  • 表必须要有主键,建议使用整型作为主键
  • 禁止使用外键,表之间的关联性和完整性通过应用程序代码去维护和控制
  • 表在设计之初、硬考虑到大致的数量级。若表记录数低于1000W、尽量使用单表,不建议分表。(千万和亿级别可以考虑分区即可。更大才考虑分库分表)。
  • 建议将大字段,访问频率低及不需要筛选的字段拆分到拓展表中(做好垂直拆分)(比如:商品的详情)
  • 控制单实例中表分区的总数,单个表分表的个数控制在1024以内。

列设计规则

  • 合理使用字段类型,比如:
  • 正确区分tinyint(byte,boolean)、int、bigint的范围
  • 使用varchar(20)来存储手机号码,不要使用整数
  • 设计金额使用decimal或者varchar、并指定精度
  • 如果价格不作为查询字段,可以考虑使用varchar存储
  • 使用字段应该如果你设定的时候能不为null就尽量设置成not null。(表设计是:null 但是:程序一定要给以默认值:int -1 String “”)
  • 因为,null需要更多的空间存储,并且使得索引和统计变得更加复杂,可能会造成索引失效的问题。

索引规范

  • 唯一索引使用uniq_索引名称来命名
  • 非唯一索引使用idx_索引名称来命名
  • 不建议在频繁更新的字段上建立索引
  • 非必要不要进行join查询,如果要进行join查询,被join的字段必须类型相同,并建立索引
  • 单张表索引数量建议控制在5个以内,索引过多,不仅会导致插入,更新的额性能下降,还可能导致MYSQL使用错误的索引,可在语句中加上force index来强制使用某个索引。
  • 组合索引字段数不建议超过5个,理解组合索引最左前缀原则,避免重复建设索引,如果建立了(x,y,z),相当于建立了(x),(x,y),(x,y,z)。

SQL规范

  • 禁止 select * ,只获取必要字段,select *会增加cpu/io/内存/带宽的消耗。指定字段能有效利用索引覆盖指定字段查询,也可以达到,在表结构变更时,能保证对应用程序无影响。
  • insert必须指定字段,禁止使用insert into T values(),指定字段插入,在表结构变更时,能保证对应用程序无影响。
  • 隐式类型转换会是索引失效,导致回表3扫描(当然在不同MYSQL版本可能做出了优化,但是按照规范去开发还是非常必要的)
  • 禁止在where条件列使用函数或者表达式,导致不能命中索引,全表扫描。
  • 禁止负向查询(不等于)以及%开头的模糊查询,导致不能命中索引而造成全表查询。
  • 避免直接返回大结果集造成内存溢出。可采用分段和游标方式。(就是采用分页来处理或者分段来查询)
  • 返回结果集时,尽量使用limit分页显示
  • 避免出现较大的limit和offset的值
  • 使用group by或者order by的语句,即使用了limit offset。如果没有合适的索引做排序操作,也会遍历所有满足 where条件的结果。
  • 大表扫码操作尽量房到镜像库上做。
  • 禁止大表join和子查询
  • 尽量避免用or而用in去替换操作
  • 应用程序必须捕获SQL异常,方便定位线上问题。

对表进行垂直拆分&水平拆分

垂直拆分:按照业务模块拆分:商品库、用户库、订单库。
水平拆分:对表进行拆分,分表,分区,比如:用户表1 用户表2
表垂直拆分:将一个属性较多的表,一行数据较大的表,将不同的属性拆分到不同的数据库表中,以降低单库中表的大小。

  • 每个表的结构不一致
  • 表之间有至少一列的关联数据,一般是主键
  • 所有表的并集是全量数据
  • 表的字段很多、字段的使用频率不一,考虑拆表(主表和明细表)

原则

  • 将长度较短,访问频率较高的放入一张表,比如:主表
  • 将长度较长、访问频率较低的字段放入拓展表中。
  • 将经常一起访问的字段放入一张表中
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: mysql-connector-java-5.1.25.jar是MySQL官方提供的Java驱动程序,用于在Java应用程序连接和操作MySQL数据库。 这个驱动程序具有以下特点和功能: 1. 高性能:mysql-connector-java-5.1.25.jar通过使用Java的JDBC接口,能够提供快速和高效的数据库查询和操作。 2. 跨平台:该驱动程序可以在不同的操作系统上运行,并且与不同的Java开发环境兼容,包括Java SE、Java EE等。 3. 完整支持JDBC规范mysql-connector-java-5.1.25.jar完全遵守JDBC规范,包括驱动程序管理、连接管理、SQL语句执行、结果集处理等方面的要求。 4. 支持事务处理:通过该驱动程序,开发人员可以方便地使用Java的事务处理机制来实现数据库事务的管理和控制。 5. 支持连接池:mysql-connector-java-5.1.25.jar支持连接池的功能,能够有效地管理和复用数据库连接,提高系统的性能和资源利用率。 6. 支持高级功能:除了基本的数据库查询和操作功能外,该驱动程序还提供了许多高级功能,如批处理操作、存储过程和函数调用、元数据查询等。 7. 提供了丰富的API:该驱动程序提供了丰富的API,简化了开发人员连接和操作MySQL数据库的工作,使其更加方便和高效。 总之,mysql-connector-java-5.1.25.jar是一个功能强大的MySQL数据库驱动程序,为Java开发人员提供了方便、高效的方式来连接和操作MySQL数据库。 ### 回答2: mysql-connector-java-5.1.25.jar是一个Java程序与MySQL数据库进行连接的驱动程序。这个JAR文件是使用Java编写的,并且提供了一个API,允许开发人员使用Java语言编写应用程序与MySQL数据库进行交互。 这个驱动程序是使用Java Database Connectivity(JDBC)接口构建的,它允许Java应用程序通过标准的JDBC API与各种关系型数据库进行通信。通过使用mysql-connector-java-5.1.25.jar,我们可以使用Java编写应用程序来执行各种数据库操作,如查询数据,插入数据,更新数据和删除数据。 这个JAR文件必须在Java应用程序引入,以便应用程序能够正确地使用MySQL数据库。我们可以通过将这个JAR文件添加到Java应用程序的类路径来引入它。 mysql-connector-java-5.1.25.jar提供了一些类和方法,用于建立与MySQL数据库的连接,并执行各种数据库操作。通过使用这个驱动程序,我们可以通过Java代码获取对数据库的访问权限,并利用其功能来管理和操作数据库的数据。 总之,mysql-connector-java-5.1.25.jar是一个用于Java程序与MySQL数据库进行通信的驱动程序。它允许我们使用Java编写应用程序来连接和操作MySQL数据库,并提供了便捷的API接口,简化了与数据库的交互过程。 ### 回答3: mysql-connector-java-5.1.25.jar是MySQL官方提供的Java连接器,用于在Java应用程序连接和操作MySQL数据库。这个文件是一个JDBC(Java Database Connectivity)驱动,可以让开发人员通过Java代码连接到MySQL数据库服务器。 使用mysql-connector-java-5.1.25.jar,开发人员可以方便地在Java应用程序执行SQL查询、插入、更新和删除操作。连接器提供了一组API,可以进行数据库连接管理、事务处理以及结果集的获取与处理。 该jar文件的安装非常简单,只需将它包含到Java项目的类路径即可。然后,开发人员就可以使用Java的JDBC API以及连接器提供的特定方法来连接到MySQL数据库,并执行所需的操作。 mysql-connector-java-5.1.25.jar具有与MySQL数据库之间的高速数据传输能力,并且支持最新的MySQL服务器功能。它与MySQL数据库服务器紧密集成,可以提供出色的性能和稳定性。 该版本的连接器已经过一定程度的测试和验证,可以广泛应用于生产环境。除了普通的连接和查询功能,mysql-connector-java-5.1.25.jar还支持连接池和分布式事务等高级特性,可以满足各种复杂的应用程序需求。 总之,mysql-connector-java-5.1.25.jar是连接Java应用程序与MySQL数据库之间的桥梁。它提供了简单且高效的连接和操作API,使开发人员能够轻松地将Java和MySQL集成在一起,并构建出强大、可靠的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值