Mysql 表设计
来源:互联网 发布:ubuntu 查看mysql 编辑:程序博客网 时间:2024/06/05 12:04
Mysql 表设计
Mysql要设一张好的表, 先要了解以下2个知识:
- 数据类型
- 索引
数据类型
- 整数
- TINYINT
- 存储空间8位
- -128 ~ 127
- 0 ~ 255
- SMALLINT
- 存储空间16位
- -32,768 ~ 32,767
- 0 ~ 65535
- MEDIUMINT
- 存储空间24位
- -8388608 ~ 8388607
- 0 ~ 16777215
- INT
- 存储空间32位
- -2,147,483,648 ~ 2,147,483,647
- 0 ~ 4294967295
- BIGINT
- 存储空间64位
- -9223372036854775808 ~ 9223372036854775807
- 0 ~ 18446744073709551615
- TINYINT
- 实数
- DOUBLE
- 8字节
- Float
- 4字节
- DECIMAL
- DECIMAL(18,9) 小数点左右各存9个数字,每个数字4字节,小数点1字节,一共9字节
- DOUBLE
- 字符串
- CHAR 定长字符串
- VARCHAR 可变长字符串
- 长度小于255时, 使用1个额外字节记录长度信息, 大于255时使用2字节
- BLOB
- TEXT
- 枚举ENUM
- 日期
- DATETIME
- 8字节
- 1001年 ~ 9999年
- TIMESTAMP
- 4字节
- 1970年 ~ 2038年
- DATETIME
整数 有符号与无符号的效率是一样的, 应选择小但够用的类型
对于实数, 可以选择使用整数存储, 计算时除以10/100/1000就可以得到一个小数
字符串 长度固定的应选择CHAR, VARCHAR可以优化存储空间, 但UPDATE需要额外的工作, 使用VARCHAR时应分配真正需要的空间,不要多分配
BLOB&TEXT 尽量避免使用
枚举类 可以用整数代替
TIMESTAMP的空间效率比DATETIME高
避免使用NULL, 会使得索引和值比较变得更负责
IP地址 使用无符号整数存储 INET_ATON() & INET_NTOA()进行转换
电话号码 使用无符号整数存储, 空间效率更高, 而且可以数据类型校验
索引(B-Tree)
- B-Tree索引必须从左到右按顺序匹配(个数不限,按顺序就可以)才有效
- 索引查询间不能有范围(<,>,like, <> …)查询, 除IN和<=>(<>和<=>是不同的操作)
表达式&函数不能使用索引(例如:id + 1 = 5, id + 1是表达式不能使用id索引)
索引选择 不重复的索引值 / 总值 占比最高的
对于字符串, 可以冗余字段存储字符串的哈希作为索引(CRC32(), FNV64())
索引可以用于排序, 但必须满足索引的使用条件
IN会以指数增加, 一个查询中的IN不能太多
- 例如: where a1 in (1,2,3) and a2 in (4,5,6,7) and a3 in (9,10) 就会有 3*4*2 = 24种不同的组合
技巧
- 不要有太多的列
- 单个查询关联在12表以内
- 避免NULL
- 某些冗余字段可以提升查询
- 缓存表 & 汇总表
- 计数器表
阅读全文
0 0
- mysql表的设计
- mysql表设计2
- mysql大表设计
- MySQL表设计规则
- Mysql计数器表设计
- Mysql 表设计
- MySql 之表设计原则
- MySQL数据库表设计优化
- MySQL数据库表设计优化
- mysql 投票表设计优化
- MySql:多表设计---外键
- mysql订单表如何设计?
- MySQL数据库表设计优化
- mysql 表设计,约束条件,索引
- MySQL中的多表设计
- MySQL无限分类表设计
- mysql数据库表设计(1)
- mysql设计
- 用两个队列实现栈和用两个栈实现队列
- 51nod 1267 4个数和为0
- public class Solution { public int countPrimes(int n) { boolean[] isDelArray = new boolean[n];
- PowerDesigner中NAME和COMMENT的互相转换,需要执行语句
- 动/静态接收系统广播
- Mysql 表设计
- Socket的简单数据传递
- CreateProcessAsUser常用参数说明
- Dinic最大流(bzoj 2756: [SCOI2012]奇怪的游戏)
- opencv学习之数据结构与数据操作
- python Sublime Text3的使用基本配置操作&&SublimeREPL插件的安装及快捷键设置
- JAVA 攻城狮 第三十二天
- Java格式化倒计时的两种方式
- 如何在自己的Android项目中添加扫一扫功能