iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 设计规范(续)
  • 160
分享到

MySQL 设计规范(续)

2024-04-02 19:04:59 160人浏览 八月长安
摘要

1.1    数据库字段设计规范优先选择符合存储需要的最小的数据类型:对于非负数据采用无符号整型进行存储;varchar(N)中N代表字符数,不是字节数(o

1.1    数据库字段设计规范

优先选择符合存储需要的最小的数据类型

对于非负数据采用无符号整型进行存储;

varchar(N)中N代表字符数,不是字节数(oracle中是字节数,如中文GBK下2字节存一个汉字),即Mysql中varchar(2)可存储2个汉字,占用6个字节(UTF8)。

避免使用text,blob数据类型:

常见的text类型可存储64k,一般是使用不到这么大空间;

非要使用,建议把blob或text列分离到单独的扩展表中,且避免使用select *;

text, blob仅能使用前缀索引,且默认情况下text,blob列均不能有默认值。

避免使用ENUM数据类型

修改ENUM值需要alter语句;

ENUM类型的ORDER BY操作效率低,需要额外操作;

禁止使用数值作为ENUM的枚举值。

尽可能把所有列定义为NOTNULL

索引NULL列需占用额外的空间来保存(是否为空),所以占用更多空间;

比较和计算对NULL做特别处理,可能索引会失效。

使用TIMESTAMP或DATETIME类型存储时间:

TIMESTAMP 1970-01-01~2038-01-19,占用4字节和INT存储相同;

其他范围使用DATETIME类型存储。

金融财务相关类数据,使用DECIMAL类型:

占用空间有定义的宽度决定;

可用于存储比bigint更大的整数数据。

1.2    数据库sql开发规范

建议使用预编译语句进行数据库操作:

只传参数,比传递SQL语句更高效;

相同语句可以一次解析,多次使用,提高处理效率。

避免数据类型的隐式转换

隐式转换可能导致索引失效。

充分利用表上已存在的索引

避免使用双%的查询条件,如’123%’可使用索引;

一个SQL只能使用联合索引一列进行范围查询;

PS:index(a, b, c),where a = xxand b > low and b < high可使用到b列的索引,

         wherea > low and a < high and b = xx,b这列使用不到索引;

         这个处理和oracle的联合索引是一致的。

使用left join或not exists来优化not in操作。

禁止跨库查询:

程序连接不同数据库使用不同的账号;

为数据库迁移和分库分表留出余地;

降低业务的耦合度;

避免权限过大产生的安全风险,SQL注入也只能看到一个库。

禁止使用Select *

消耗过多的CPU, io, 网络资源;

无法使用覆盖索引;

可减少表结构变更带来的影响。

禁止使用不含字段列表的INSERT

INSERT INTO T(A, B) VALUES(…….);

可减少表结构变更带来的影响。

尽量避免使用子查询,可以把子查询优化为join操作:

当然并不是所有的子查询都能转换为join,如group by等得子查询;

通常是IN子查询这样的语句。

子查询结果集无法使用索引;子查询会产生临时表操作,如果子查询数据量大将严重影响效率;消耗过多的CPU、IO。

避免使用JOIN关联太多的表:

每Join一个表多占用一部分内存(join_buffer_size);

会产生临时表操作,影响查询效率;

mysql最多允许关联61个表,建议不超过5个。

减少同数据库的交互次数:

数据库更适合做批量操作;

合并多个相同的操作到一起;

PS:如alter table t addcolumn c1 int, change column c2 c2 int…

使用in代替or

in的值不要超过500个;

in操作可以有效的利用索引。

禁止使用order byrand()进行随机排序:

会把表中所有满足条件的数据装载到内存中进行排序

消耗大量的CPU/IO/MEM;

处理方式:推荐在程序中获取一个随机值,然后在数据库中获取数据的方式(亲认为开发人员愿意去实现多余的算法吗?都希望一句SQL返回结果集)。

WHERE从句禁止对列进行函数转换和计算:

where date(createtime) = ‘20171010’ à where createtime >= ‘20171010’ and createtime < ‘20171011’

UNIONALL OR UNION

这两种排序方式和Oracle的完全一致,UNION ALL不排序,UNION排序。

拆分复杂SQL为多个小SQL

MySQL一个SQL只能使用一个CPU进行计算;

SQL拆分后可以通过并行查询提高处理效率。

1.3    数据库操作行为规范

超过100W行数据批量DML操作,要分批多次进行操作

需考虑主从延迟;

binlog日志为row格式产生大量日志;

避免大事务的操作,阻塞并行。

大表表结构修改

推荐使用pt-online-schema-change修改表结构;

可避免大表修改产生的主动延迟;

避免在对表字段修改时进行表。

禁止为程序账号赋予super权限:

当达到最大连接数限制时,还允许使用一个带有super权限的用户连接;

super权限只能留给DBA处理问题的账号使用。

对程序账号,遵循权限最小的原则:

程序在使用数据库账号只能在一个DB下使用,不允许跨库使用;

程序账号原则上不允许有drop权限。


您可能感兴趣的文档:

--结束END--

本文标题: MySQL 设计规范(续)

本文链接: https://www.lsjlt.com/news/37387.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL设计规范
    1.  数据库设计规范数据库命名规范数据库基本设计规范数据库索引设计规范数据库字段设计规范SQL开发规范数据库操作规范1.1    数据库命名规范...
    99+
    2024-04-02
  • MySQL开发设计规范有哪些
    这期内容当中小编将会给大家带来有关MySQL开发设计规范有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。命名规范 l  库名、表名、字段名禁止超过32个...
    99+
    2024-04-02
  • MySQL数据库设计规范是什么
    这篇“MySQL数据库设计规范是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQ...
    99+
    2024-04-02
  • MySQL数据库设计规范有哪些
    本篇文章给大家分享的是有关MySQL数据库设计规范有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、数据库设计以下所有规范会按照【高危】...
    99+
    2024-04-02
  • 《MySQL高级篇》九、数据库的设计规范
    文章目录 1. 为什么需要数据库设计2. 范 式2.1 范式简介2.2 范式都包括哪些2.3 键和相关属性的概念2.4 第一范式(1st NF)2.5 第二范式(2nd NF)2.6 第三范式...
    99+
    2023-09-12
    数据库 mysql 设计规范
  • 数据库设计规范(详细)
    数据库设计规范是指在设计数据库时需要遵守的一系列规则和准则,以确保数据库结构的合理性、一致性和可维护性。下面是一些常见的数据库设计规...
    99+
    2023-09-13
    数据库
  • MySQL数据库表设计规范是怎么样的
    小编给大家分享一下MySQL数据库表设计规范是怎么样的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、数据库设计1、一般都使用 INNODB 存储引擎,除非读写比率<1%,才考虑使...
    99+
    2024-04-02
  • Android App设计规范深入讲解
    目录前言一,界面设计与代码逻辑二,利用XML标记描绘应用界面三,使用Java代码书写程序逻辑总结前言 主要是介绍了App工程的源码设计规范,首先App将看得见的界面设计与看不见的代码...
    99+
    2022-11-13
    安卓APP设计规范 android app设计规范 安卓app开发
  • MongoDB设计命名规范有哪些
    MongoDB设计命名规范有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.    &nbs...
    99+
    2024-04-02
  • 数据库设计规范有哪些
    1. 数据库表命名规范:表名应该具有描述性,表名应该使用小写字母,单词之间使用下划线连接。2. 字段命名规范:字段名应该使用小写字母...
    99+
    2023-06-10
    数据库设计规范 数据库
  • golang函数设计原则与规范
    go函数设计原则包括:可读性(使用有意义的名称、简短的函数体和避免嵌套函数)、可维护性(错误处理、值传递和输入验证)和可重用性(包分组、接口定义和文档字符串)。遵循这些原则有助于编写清晰...
    99+
    2024-04-26
    golang 函数设计
  • MySQL数据库基本设计规范是怎么样的
    这篇文章将为大家详细讲解有关MySQL数据库基本设计规范是怎么样的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。所有表必须使用Innodb存储引擎   ...
    99+
    2024-04-02
  • 如何使用MySQL进行表的设计和规范化?
    如何使用MySQL进行表的设计和规范化?MySQL是一种常用的关系型数据库管理系统,被广泛应用于各种软件开发和数据存储需求中。在使用MySQL进行表的设计和规范化时,遵循一定的原则和规则可以提高数据库的性能和可维护性。本文将介绍如何使用My...
    99+
    2023-10-22
    - MySQL - 表设计 - 规范化
  • SQLServer数据库有哪些设计规范
    这篇文章给大家介绍SQLServer数据库有哪些设计规范,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  SQLServer数据库的设计规范有什么  1、对象注释规则:  注释头:注释...
    99+
    2024-04-02
  • MySQ设计与开发规范有哪些
    这篇文章主要介绍了MySQ设计与开发规范有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQ设计与开发规范有哪些文章都会有所收获,下面我们一起来看看吧。数据库对象命名规...
    99+
    2024-04-02
  • 自己总结的数据库设计规范
    总体方向思维1.数据架构和容量规划相关    a.总数据量的预估,一年或两年为期限,直接影响硬盘容量规划    b.是否关联其他数据库和环境,关联...
    99+
    2024-04-02
  • 如何从设计和规范上规避RDS性能问题?
    场景一:宽表 建议 (1)单个InnoDB表的字段数,建议少于50个; (2)大字段,例如:text、blob类型,考虑单独存放; 现象 ...
    99+
    2024-04-02
  • MySQL数据库命令和基本设计规范详细介绍
    本篇内容主要讲解“MySQL数据库命令和基本设计规范详细介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据库命令和基本设计规范详细介绍”吧!一、数...
    99+
    2024-04-02
  • 小程序设计的规范问题有哪些
    本篇内容介绍了“小程序设计的规范问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!小程序设计区域小程序的「所有页面」右上角位置,都固定...
    99+
    2023-06-27
  • 数据库设计规范化要求有哪些
    本篇内容主要讲解“数据库设计规范化要求有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库设计规范化要求有哪些”吧!  要求一:表中应该避免可为空的列。 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作