文档章节

数据库设计(二)(引擎,命名规则,字段类型的选择比较)

Jarvix
 Jarvix
发布于 2017/03/27 17:59
字数 1009
阅读 26
收藏 0

MySQL 常用的存储引擎

    存储引擎    事务          锁颗粒                 主要应用            忌用
    MyISAM      不支持     支持并发插入的表级锁    SELECT,INSERT     读写操作频繁
    MEG_MyISAM  不支持     支持并发插入的表级锁    分段归档,数据仓库  全局查找过多的场景
    Innodb      支持      支持MVCC的行级锁         事务处理             无
    Archive     不支持     行级锁                 日志记录,只支持    需要随即读取更新删除
    Ndb cluster 支持          行级锁             高可用性             大部分应用

    MyISAM  5.5默认引擎  读写高效,写的时候要锁表,量大容易阻塞
    Innodb  阻塞更少
    Ndb cluster MySQL集群


表及字段的命名规则

所有对象命名应该遵循的原则:
    1.可读性
        使用大写和小写来格式化的库对象名以获得良好的可读性。
        例如:使用CustAddress而不是custaddress来提高可读性
        (这里要注意有些DBMS系统对表名的大小写敏感设置)

    2.表意性
        对象的名字应该能描述它所标识的对象。
        例如:对于表,表的名称应该能够体现表中存储的数据内容;
        对于存储过程,存储过程名称应该能够体现存储过程的功能。

    3.长明原则
        尽可能少使用或者不使用缩写,
        适用于数据库(DATABASE)名之外的任一对象


字段类型的选择

    生日:1978-03-01
    Char(10)三 / varchar(20)四 / Datetime 二 /  Int 一

    原则:列的数据类型一方面影响数据存储空间的开销,
    另一方面也会影响数据查询性能。当一个列可以选择多种数据类型时,
    应该优先考虑数据类型,其次是日期或者二进制类型,最后是字符类型。
    对于相同级别的数据类型,应该优先选择占用空间小的数据类型。

    列类型     |       存储空间
    TINYINT     1字节
    SMALLINT    2字节
    MEDIUMINT   3字节
    INT         4字节
    BIGINT      8字节
    DATE        3字节
    DATETUNE    8字节
    TIMESTANP   4字节
    CHAR(M)     M字节,1<= M <= 255
    VARCHAR(M)  L+1字节,在此L <= M 和 1 <= M <= 255

    以上选择原则主要是从下面两个角度考虑:
    1.在对数据进行比较(查询条件,JOIN条件及排序)操作时:
    同样的数据,字符处理往往比数字处理慢。
    2.在数据库中,数据处理以页为单位,列的长度越小,利于性能提升。

具体选择:
char/varchar  如何选择
原则:
    1.如果列中要存储的数据长度差不多一致的,应该选择考虑用char;否则考虑用varchar
    2.如果列中的最大数据长度小于50Byte,则一般考虑用char。
    (当然,如果这个列很少用,则基于节省空间和减少I/O的考虑,还是可以选择用varchar)
    3.一般不宜定义大于50Byte的char类型列。
utf8 = 1字符 = 3字节

decimal与float 如何选择
原则:
    1.decimal用于存储精确数据,而float只能用于存储非精确数据
    故精确数据只能选择用decimal类型。
    2.由于float的存储空间开销一般比decimal小(精确到7位小数只需要4个字节,而精确到15位小数只需要8字节)
    故非精确数据优先选择float类型。

时间类型如何存储
1.使用int来存储时间字段的优缺点
    优点:字段长度比datetime小。
    缺点:使用不方便,要进行函数转换。
    限制:只能存储到2018-1-19 11:14:07即2^32为2147483648
2.需要存储的时间粒度
    年月日小时分秒周
总结:如果不经常查询出来展示的,可以使用int即可,
如果是需要经常查询出来判断或者什么的还是存datetime方便,不需要转换。

    

 

 

                                                                                                        =====未完待续

© 著作权归作者所有

Jarvix
粉丝 11
博文 62
码字总数 24458
作品 0
广州
高级程序员
私信 提问
mysql web数据库的设计归范-1命名规范

[数据库环境介绍] 通常来讲,各个互联网公司的数据库分为5个数据库环境: 1. dev : 开发环境, 开发可读写,可修改表结构; 常用的163的数据库表; 开发人员可以修改表结构, 可以随意修改其中的数...

董泽润
2014/07/11
11.6K
0
MySQL数据库开发常见问题及优化

mysql 数据库是被广泛应用的关系型数据库,其体积小、支持多处理器、开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高。在使用 mysql 的过程中不规范的 SQL 编写、非最优的策略选...

课工场CC老师
2017/11/03
7
0
好程序员分享Java开发常用规范技巧二

1、使用一些日期类的时候,推荐使用LocalDateTime来替代Calendar类,或者说使用Instant来替代掉Date类。 2、尽量避免在for循环里面执行try-catch操作,可以选择将try-catch操作放在循环体外部...

好程序员IT
07/04
69
0
数据库结构的优化

数据库设计的步骤: 需求分析:全面了解产品设计的存储需求 逻辑设计:设计数据的逻辑存储结构 物理设计:根据所使用的数据库特点进行表结构的设计 维护优化:根据实际的情况对索引、存储引擎...

Panda_Jerry
2017/11/09
0
0
MySQL数据库设计总结

版权声明:本文由漆洪凯原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/119 来源:腾云阁 https://www.qcloud.com/community 规则1:一般情况可以选择M...

偶素浅小浅
2016/11/01
12
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
今天
8
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
今天
6
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
今天
8
0
Flutter 系列之Dart语言概述

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧 一、...

過愙
今天
5
0
rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部