mysql-笔记-命名、索引规范
1 命名规范
所有数据库对象名称必须使用小写字母并用下划线分割
禁止使用mysql保留关键字 ---如果表名中包含关键字查询时,需要将其有单引号括起来
见名识意,并且最后不要超过32个字符
临时库表以tmp_为前缀并以日期为后缀,备份表以bak_为前缀并以日期为后缀
所有存储相同数据的列名和列类型必须一致--一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低
2 数据库基本设计规范
没有特殊要求下,所有表必须使用innodb存储引擎--支付事务、行级锁、更好的恢复性、高并发下性能更好
数据库和表的字符集统一使用utf8---统一字符集可以避免由于字符集转换产生的乱码,不同的字符集进行比较前需要进行转换会造成索引失效
所有表和字段都需要添加注释--使用comment从句添加表和列的备注进行数据字典的维护
尽量控制单表数据量的大小,建议控制在500万以内,过大会造成修改表结构、备份、恢复都会有很大的问题。可以用历史数据归档应用于日志数据,分库分表应用于业务数据等手段
谨慎使用mysql分区表--分区表在物理上表现为多个文件,在逻辑上表现为一个表,跨分区查询效率可能更低,建议采用物理分表的方式管理大数据
尽量做到冷热数据分离,减小表的宽度--mysql限制每个表最多存储4096列,并且每一行数据在大小不能超过65535字节 减少磁盘IO--保证热数据的内存缓存命中率,避免读入无用的冷数,经常一起使用的列放到一个表中避免更多的关联操作。
禁止在表中建立预留字段--无法确认存储的数据类型,对预留字段类型的修改会对表进行锁定
禁止在数据库中存储图片,文件等大的二进制数据---IO操作耗时,通常存储于文件服务器,数据库只存储文件地址信息
禁止在线上做数据库压力测试
禁止从开发环境、测试环境直接连接生成环境数据库
2 数据库字段设计规范
优先选择符合存储需要的最小的数据类型-- 字段大,建立索引空间大,IO次数多,索引性能差
1 将字符串转换成数字类型存储如:IP地址-插入数据前先用inet_aton把ip地址转为整型,节省空间,显示数据时使用inet_ntoa把整型ip地址转为地址显示即可
2 对于非负型的数据 如 自增id IP 要优先使用无符号整型来存储,无符号相对于有符号可以多出一倍的存储空间
同财务相关的金额数据必须使用decimal类型
非精准浮点:float,double
4 索引设计规范
限制每张表上的索引数量,不超过5个,索引可以增加查询效率,同样也会降低插入和更新的效率,有些情况下会降低查询效率
因为mysql优化器在选择如何优化查询时,会根据统一信息,对每一个可以用到的索引来进行评估,以生成出一个最好的执行计划,如果同时有很多个索引都可以用于查询,就会增加mysql优化器生成执行计划的时间,同样会降低查询性能
禁止给表中的每一列都建立单独的索引---使用联合索引查询
每个索引组织表innodb必须有个主键--数据的存储的逻辑顺序和索引的顺序是相同的,每个表都可以有多个索引,但是表的存储顺序只能有一种innodb是按照主键索引的顺序来组织表的。
不要使用更新频繁的列作为主键,不要使用uuid md5 hash 字符串列作为主键--无法保证数据的顺序增加
主键建议使用自增ID值
5 常见索引列建议
出现在select update delete 语句的where 从句中的列
包含在order by group by distinct中的字段
多表join的关联列
建立联合索引效果更好
6 索引列的顺序 -区分别最高的放在联合索引的最左侧 ,区分度=列中不同值的数量/列的总行数
尽量把字段长度小的列放在联合索引的左侧
7 避免建立冗余索引和重复索引
mysql-笔记-命名、索引规范的更多相关文章
- MySQL笔记(5)---索引与算法
1.前言 本章记录MySQL中的索引机制,了解索引可以让数据库更快.索引太多会造成性能损耗,索引太少肯定查询效率不高. 2.InnoDB存储引擎所有概述 InnoDB中常见的索引有: B+树索引 全文 ...
- 【笔记】MySQL学习之索引
[笔记]MySQL学习之索引 一 索引简单介绍 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可. 普通 ...
- MySQL笔记(8)-- 索引类型
一.背景 前面我们讲了SQL分析和索引优化都涉及到了索引,那么什么是索引,它的模型有什么,实现的机制是什么,今天我们来好好讨论下. 二.索引的介绍 索引就相当书的目录,比如一本500页的书,如果你想快 ...
- 高性能MySQL笔记 第5章 创建高性能的索引
索引(index),在MySQL中也被叫做键(key),是存储引擎用于快速找到记录的一种数据结构.索引优化是对查询性能优化最有效的手段. 5.1 索引基础 索引的类型 索引是在存储引擎层而 ...
- mysql笔记02 创建高性能的索引
创建高性能的索引 1. 索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数据结构. 2. 索引可以包含一个或多个列的值.如果索引包含多个列,那么列的顺序 ...
- MySQL学习笔记(三)—索引
一.概述 1.基本概念 在大型数据库中,一张表中要容纳几万.几十万,甚至几百万的的数据,而当这些表与其他表连接后,所得到的新的数据数目更是要大大超出原来的表.当用户检索这么大量的数据时,经 ...
- MySql基础笔记(二)Mysql语句优化---索引
Mysql语句优化--索引 一.开始优化前的准备 一)explain语句 当MySql要执行一个查询语句的时候,它首先会对语句进行语法检查,然后生成一个QEP(Query Execution Plan ...
- MySQL之InnoDB索引面试学习笔记
写在前面 想要做好后台开发,终究是绕不过索引这一关的.先问自己一个问题,InnoDB为什么选择B+树作为默认索引结构.本文主要参考MySQL索引背后的数据结构及算法原理和剖析Mysql的InnoDB索 ...
- 最全mysql笔记整理
mysql笔记整理 作者:python技术人 博客:https://www.cnblogs.com/lpdeboke Windows服务 -- 启动MySQL net start mysql -- 创 ...
随机推荐
- linux_shell 编程学习-初识she'll
一.she'll编程规范 1.she'll脚本命名一般为英文的大小写; 2.不能用特殊符号.空格来命名; 3.she'll脚本后缀以.sh结尾; 4.不建议she'll命名为纯数字,一般以脚本功能命名 ...
- webpack打包vue
一.原理 webpack 背后的原理其实就是把所有的非 js 资源都转换成 js (如把一个 css 文件转换成“创建一个 style 标签并把它插入 document ”的脚本.把图片转换成一个图片 ...
- jsp基础语言-jsp声明
jsp声明的语法格式:<%! 声明代码 %> jsp声明的意义:用来定义在程序中使用到的变量.方法等.最后要以“:”结尾. jsp声明举例: <%! int a=100,b=200; ...
- Asp.Net MVC @Html.TextBox 只允许输入数字问题
转到Html.TextBox()看可以看出 Html.TextBox()方法,创建文本框[<input type="text"/>],并且可以带上name,value和 ...
- ios------app跳转到appStore评分
跳转到AppStore评分,有两种方法: 一种是跳出应用,跳转到AppStore,进行评分: 另一种是在应用内,内置AppStore进行评分. PS:appID在https://itunesconne ...
- SVN上传的时候没法显示文件名,只显示后缀名
之前在用SVN上传android代码的时候,发现上传列表上的文件没法显示名字,只显示了后缀名,就像这样: 各种疑惑,最终发现解决方法: 右键单击操作栏的status: 然后在出现的选项里面将filen ...
- 自定义HorizontalScrollView的scrollBar
尊重劳动成果,转载请标明出处http://www.cnblogs.com/tangZH/p/8423803.html android滑动组件的scrollBar,看了不是很顺眼,没办法,因为项目需求, ...
- 2019Java查漏补缺(二)
查看了公众号:java之间的整理的集和文章,文章地址 总结和搜索了一下网络知识,总结了一下: 1.String 的hashcode()方法 2.switch总结: 3.如何实现克隆 1.String ...
- 【原】Java学习笔记010 - 数组
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:一堆分数,要 ...
- 【原】Java学习笔记009 - 阶段测试
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 1.需求:打印如下 ...