MySQL之表结构设计

Schema设计原则 :

  1. 更小的数据类型,根据估计选择不会超过范围的最小数据类型。
  2. 简单数据类型的操作通常需要更少的CPU周期。例如整型比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较比整型比较更复杂。

尽量避免NULL:最好指定列为NOT NULL,除非真的需要存储NULL值。NULL列使得索引、索引统计和值比较都更复杂,使用更多的存储空间。如果计划在列上建索引,就应该尽量避免设计成可为NULL的列

 

实数类型

  1. FLOAT DOUBLE类型支持使用标准的浮点运算进行近似计算。DECIMAL类型用于存储精确的小数
  2. CPU直接支持原生浮点计算,所以浮点运算明显更快。

因为需要额外的空间和计算开销,所以尽量只在对小数进行精确计算时才使用DECIMAL—例如存储财务数据。但在数据量比较大的时候,可以考虑使用BIGINT代替DECIMAL,将需要存储的数值根据小数的位数乘以相应倍数即可

 

字符串类型

下面这些情况使用VARCHAR:

  1. 字符串列的最大长度比平均长度大很多;
  2. 列的更新很少,所以碎片不是问题;
  3. 使用了像UTF-8这样复杂的字符集,每个字符都使用不同的字节数进行存储

CAHR的使用场景:

  1. CHAR类型是定长的,适合存储很短的字符串,或所有值接近同一个长度;

 枚举类型

  1. 把一些不重复的字符串存储成一个预定义的集合。MySQL在存储枚举时非常紧凑,会根据列表值的数量压缩到一个或者两个字节中。
  2. 枚举最不好的地方是,字符串列表是固定的,添加或删除字符串必须使用ALTER TABLE,因此对于未来可变的字符串,不建议使用枚举

 特殊数据类型

IPv4 地址:虽然经常使用VARCHAR(15)列来存储IP地址。然而,它们实际上是32位无符号整数,不是字符串。用小数点将地址分成四段的表示方法只是为了让人们阅读容易。所以应该用无符号整数存储IP地址。MySQL提供INET_ATON() 和 INET_NTOA()函数在这两种表示方法之间转换。varchar存储ip地址的弊端之一是:无法根据指定的ip地址范围进行区间搜索,而转换为32位无符号整数则可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS8:把这些七招APP哭

6月3日。苹果发布了新一代的高配置手机操作系统iOS 8,我们看到了很多新的功能和引人注目的新变化。它为开发人员提供了许多其他更酷能力发展。第三方输入法也开放,这使得国内的百度、搜狗输入法是不过高兴的尖叫,但IOS8是弄哭了一大拨APP。以…

前端学习(1703):前端系列javascript之问题解答

function fn1(a, b) {console.log(this, this)console.log(a, b)return this is fn1 } const fn2 fn1.bind({ x: 100 }, 10, 20, 30); const res fn2(); console.log(res);//模拟bind Function.prototype.bind1 function() {const args Array.prototype.slice.call(argumen…

MySQL表结构设计之范式化和反范式化对比

优点 缺点 范式 1、范式化的更新操作通常比反范式化要快,只需要修改较少数据。 2、范式化的表通常更小,可以更好地放在内存里,所以执行操作会更快。 复杂的查询语句在符合范式的schema上都可能需要至少一次关联,关联表的代价昂…

11.粘性控件

粘性控件 (对View的自定义)* 应用场景: 未读提醒的清除* 功能实现:> 1. 画静态图 OK> 2. 把静态的数值变成变量(计算得到真实的变量) OK > 3. 不断地修改变量, 重绘界面, 动起来了.> 4. 功能分析:a. 拖拽超出范围,断开, 松手, 消失b. 拖拽超…

前端学习(1704):前端系列javascript之问题解答2和总结

//闭包隐藏数据 function createCache() {const data {} //闭包中的数据 被访问 不被外界访问return {set: function(key, val) {data[key] val},get: function(key) {return data[key];}} } const c createCache(); c.set(a, 100); console.log(c.get(a)); 弹出1,2,3&…

高性能索引设计

索引的优点 减少了服务器需要扫描的数据量帮助服务器避免排序和临时表将随机I/O变成顺序I/O 索引的类型 B-Tree索引 B-TREE通常就意味着里面存储的所有值都是有序的,并且查询的时候,不用全表扫描,而是按照索引结构查找,所以会更…

posix thread线程

1. pthread线程通过调用你提供的某些函数开始。这个“线程函数”应该只有一个void*型参数,并返回系统的类型。2. 通过向pthread_create函数传递线程函数的地址和线程函数调用的参数来参加线程。3. 线程可以通过pthread_self获取自己的ID。4. 除非线程的创建者或者线…

MySQL查询语句优化

慢查询原因 1 从数据库请求不需要的数据 例如业务只需要返回指定的列,sql查询全部列,或者多表关联返回全部列。某些相同数据被重查询多次,可以结合实际业务在初次查询后进行缓存,需要时候从缓存中取出 2 扫描额外的记录行 2 解…

python之装饰器详解

这几天翻看python语法,看到装饰器这里着实卡了一阵,最初认为也就是个函数指针的用法,但仔细研究后发现,不止这么简单。 首先很多资料将装饰器定义为AOP的范畴,也就是Aspect Oriented Programming面向切面编程的概念&am…

“睡服”面试官系列第十六篇之Symbol(建议收藏学习)

目录 1. 概述 2. 作为属性名的 Symbol 3. 实例:消除魔术字符串 4. 属性名的遍历 5. Symbol.for(),Symbol.keyFor() 6. 实例:模块的 Singleton 模式 7. 内置的 Symbol 值 7.1Symbol.hasInstance 7.2Symbol.isConcatSpreadable 7.3Sy…

POST请求传入中文参数,接收端乱码

问题描述&#xff1a;通过post请求调试短信接口发送出去后&#xff0c;客户端无法收到短信&#xff0c;中文内容乱码 追踪过程&#xff1a; 接口采用post请求进行&#xff0c;无法收取短信的接口代码如下&#xff1a; public static String sendPost(String url, Map<Stri…

LeetCode - Container With Most Water

题目&#xff1a; Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms…

TCP/IP协议模型

1. 数据链路层 作用(1) 实现网卡接口的网络驱动&#xff0c;以处理数据在以太网线等物理媒介上的传输   (2) 网络驱动程序隐藏了不同物理网络的不同电气特性&#xff0c;为上层协议提供一个统一的接口 应用ARP和RARP(Reverse Address Resolve Protocol)即逆地址解析协议&am…

【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

目录(?)[-] xml控件代码重用includexml控件代码重用merge横屏和竖屏landsacpe portraitxml控件代码重用&#xff1a;include 如果我们定义一个控件&#xff0c;需要在不同的layout中重复使用&#xff0c;或者在同一个layout中重复使用&#xff0c;可以采用include的方式。例如…

管理者一定会遇到的那些事

——极客时间——沈剑老师分享有感

Git使用攻略

Git使用攻略 merge&#xff0c;将develop合并到master# 切换到Master分支git checkout master# 将Develop分支合并到master git merge --no-ff develop 切换分支git checkout master 检出代码git checkout master 创建分支git branch newBranch查看本地分支git branch查看远程分…