一.表及字段的命名规范
1.可读性原则
使用大写和小写来格式化的库对象名字以获得良好的可读性。

例如:使用CustAdress而不是custaddress来提高可读性。(这里注意有些DBMS系统对表名的大小写是敏感的)
2.表意性原则

对象的名字应该能够描述它所标识的对象
例如:对于表,表的名称应该能够体现
表中存储的数据内容;对于存储过程,存储过程名称应该能够体现存储过程的功能。
3.长名性原则
尽量不要使用缩写

适用于数据库(DATABASE)名之外的任一对象
二.字段类型的选择原则
例如:brithday:char(10)
,varchar(20),datatime,int列的数据类型一方面影响数据存储空间的开销,另一方面也会影响数据查询的性能,当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。对于相同级别的数据类型,应该优先选择占用空间小的数据类型。

原因:
(1)在对数据进行比较(查询条件,join条件及排序)操作时,
字符处理往往比数字处理慢。

(2)在数据库中,数据处理以页为单位,列的长度越小,利于性能的提升。

三.Char和varchar如何选择
1.如果列中要存储的数据长度差不多是一致的,则应该考虑用char,否则应该考虑用varchar.

2.如果列中最大数据长度小于50byte,则一般考虑使用char.(当然,如果这个列很少用,世界大学排名则基于节省空间和减少i/o的考虑,还是可以选择用varchar).

3.一般不宜定义大于50byte的char类型列.

四.Decimal和float如何选择

1.decimal用于存储精确数据,而float只能用于存储非精确型数据,故精确型数据只能选择用decimal类型。

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

五 .时间类型如何存储
1.使用int来存储时间字段的优缺点
(1)优点:字段比datatime小

(2)缺点:使用不方便,要进行函数转换
(3)只能存储到2038-1-19 11::1:07即2^32为2147483648

2.需要存储的时间粒度
(1)年月日时分秒周等

六.如何选择主键
1.区分业务主键和数据库主键
业务主键用于标识业务数据,进行表与表之间的关联;

数据库主键为了优化数据存储(innodb会生成6个字节的隐含主键)

2.根据数据库的类型,考虑主键是否要顺序增长
有些数据库是按主键的顺序逻辑存储的

3.主键的字段类型所占空间要尽可能的小。
对于使用聚集索引方式存储的表,每个索引后都会附加主键信息。

七.避免使用外键约束
1.降低数据就导入的效率
2.增加维护成本

3.虽然不建议使用外键约束,但是相关联的列上一定要建立索引

八.避免使用触发器
1.降低数据导入的效率
2.可能会出现意想不到的数据异常
3.使业务逻辑变得复杂

九.关于预留字段
1.无法精确的知道预留字段的类型
2.无法精确的知道预留字段中所存储的内容

3.后期维护预留字段所要的成本同增加一个字段所用的成本是相同的
4.严禁使用预留字段。

十.什么是反范式化

反范式化是针对范式化而言的,在是为了性能和读取效率的考虑而适当的对第三范式的要求进行违反,而允许存在少量的数据冗余,换句话说反范式化就是使用空间来换取时间

好处:
(1)减少表的关联数量
(2)增加数据的读取效率
(3)反范式化一定要适度

十一.维护和优化
(1)维护数据字典
(2)维护索引
(3)维护表结构
(4)在适当的时候对表进行拆分

十二.如何维护索引
(1)索引并不是越多越好,过多的索引不但会降低写的效率,而且会降低读的效率
(2)定期维护索引碎片

(3)在sql语句中不要使用强制索引关键字

十三.如何维护表结构
(1)使用在线变更表结构的工具
(2)Mysql5.5之前可以使用pt-online-schema-change

(3)Mysql5.6之后本身支持在线表结构的表更
(4)同时对数据字典进行维护
(5)控制好表的宽度和大小

十四.数据库中适合的操作
(1)批量操作VS逐条操作
(2)禁止使用select * 这样的查询
(3)控制使用用户自定义函数

(4)不要使用数据库中的全文索引

十五.表的拆分
(1)表的水平拆分解决了表中数据量的问题
(2)表的垂直拆分解决了表的宽度问题

使用mysql应该注意的细节的更多相关文章

  1. mysql之sql语句细节问题汇总

    一.mysql count distinct null 使用注意事项 1  用一个例子来讲解一个问题,现在又一个库表hello,表内容如下: id     name 1      Null 2     ...

  2. MySQL常用数据类型及细节

    目录 1 整数类型 1.1 可选属性 1.1.1 M 1.1.2 UNSIGNED 1.1.3 ZEROFILL 2 浮点类型 2.1 精度误差 3 定点数类型 3.1 数据精度说明 3.2 类型介绍 ...

  3. MySQL操作中的一些细节及良好习惯--------持续更新中...

    1.尽量不要写太过复杂的SQL查询,不要想着非要一次性将结果全部以前端要求的形式返回出来,可以多次分开查询,这样逻辑清晰,问题解决速度快,方便维护,并且SQL的效率也高. 2.在使用联表查询的时候,关 ...

  4. MySQL锁---InnoDB行锁需要注意的细节

    前言 换了工作之后,接近半年没有发博客了(一直加班),emmmm.....今天好不容易有时间,记录下工作中遇到的一些问题,接下来应该重拾知识点了.因为新公司工作中MySQL库经常出现查询慢,锁等待,节 ...

  5. Mysql无法创建外键的原因

    在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1.  两个字段的类型或者大小不严格匹配.例如,如果一个 ...

  6. 转mysql存储引擎memory,ndb,innodb之选择

    1 mysql的innodb和cluster的NDB引擎都支持事务,在有共同的特性外,也有不同之处:以mysql cluster NDB 7.3和MySQL 5.6之InnoDB为例:ndb7.3基于 ...

  7. 转!!!Mysql无法创建外键的原因

    在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1.  两个字段的类型或者大小不严格匹配.例如,如果一个 ...

  8. mysql INNODB_TRX 事务表

    demo:/root# mysql -uroot -pkjk7787czcb --socket=/data01/mysql/mysql.sock -e"show processlist&qu ...

  9. <转>一个最不可思议的MySQL死锁分析

    1 死锁问题背景 1 1.1 一个不可思议的死锁 1 1.1.1 初步分析 3 1.2 如何阅读死锁日志 3 2 死锁原因深入剖析 4 2.1 Delete操作的加锁逻辑 4 2.2 死锁预防策略 5 ...

随机推荐

  1. python实现读取配置文件

    实现代码如下: # 读取配置文件,取其值组成列表class ReadTxt: def read_txt(self,path): li_info = [] with open(path) as f: l ...

  2. 记一次 Json 对象转换为 Java 对象的问题

    1.描述 最近在使用 Jackson 将 Json 串转换回 Java 对象的时候遇到了 ClassCastException 错误,特此记述. 2.问题复现 问题出现的节点在于属性节点的 JavaT ...

  3. C++学习笔记(二)--基础

    1.浮点型数值不管写成什么样 都是以指数形式保存在内存中 数符|数字部分|指数部分 例:+0.33E10 数字部分的整数部分不能大于1,小数点后面不能是0. 2.字符数据是以整数形式保存在内存中的(A ...

  4. [ARC083]Collecting Balls

    Description 有一个 \(n\times n\) 的矩阵,矩阵内有 \(2n\) 个球.对于 \(i \in [1,n]\) ,\((0,i) (i,0)\) 的位置各有一个启动后往右走/往 ...

  5. Angular2+之模态框-使用ngx-bootstrap包中的模态框组件实现

    模态框是项目中经常会用到的一个公共功能,通常会被用左提示框或者扩展选项框. 下面,我用一个小例子来简单展示实现模态框功能的过程: 1.为项目加包: ng add ngx-bootstrap 2.在xx ...

  6. Using text search in Web page with Sikuli

    在網頁中如何使用Sikuli找特定字串呢? 原理: 我們可以使用 組合鍵 ctrl + 來放大網頁的比例,使得sikuli的OCR功能找的更清準 實作: for i in range(4): type ...

  7. 2019 Multi-University Training Contest 1 - 1009 - String - 贪心

    不知道错在哪里. 是要把atop改成stop!两个弄混了.感谢自造样例. #include<bits/stdc++.h> using namespace std; typedef long ...

  8. linux内存子系统调优

  9. spark 计算结果写入mysql 案例及常见问题解决

    package com.jxd import org.apache.spark.SparkContextimport org.apache.spark.SparkConfimport java.sql ...

  10. hdu 4235 容斥原理模板题

    题目大意: 输入样例个数T,每个样例输入三个数a,b,n,求[a,b]之间与n互素的个数 基本思路: 互斥,想想这个:AUBUC=A+B+C-A∩B-A∩C-B∩C+A∩B∩C fac存的是n的素因数 ...