MySQL数据类型与架构优化

MySQL在创建数据类型时应当遵守以下这三个简单原则:

1.更小更好

用能正确地存储和表示数据的最小类型来保存,它们使用了更少的磁盘空间,内存和CPU缓存,而且需要的CPU周期也少。

2.越简单越好

越简单的数据类型越好。例如比较整数的代价小于比较字符。用自带的日期类型来保存日期,而不要使用字符串或者整数来保存日期。保存IP地址也应该用整数。

3.尽量避免NULL

尽可能地把字段定义为NOT NULL,尽量考虑使用0,特殊值或者空字符串来替代。

类型    字节    范    围    无符号(unsigned)
tinyint    1    -128    127    0-255
smallint    2    -32768    32767    0-65535
mediumint    3    -8388608    8388607    0-16777215
int    4    -2147483648    2147483647    0-4294967295
bigint    8    -9223372036854775808    9223372036854775807    0-18446744073709551615
用尽可能小的类型来存储数据。

 

例子:

1.使用整数来存储IP地址

一个IPv4最小需要7个字符,最大需要15个字符,所以,使用VARCHAR(15)即可。但255.255.255.255转换为数字为4294967295,使用int(10)存储更节省空间,且int比varchar逻辑运算速度更快。mysql提供了函数inet_aton()、inet_ntoa()对数字和ip之间进行转换。

2.存储金额

从精度和稳定性考虑使用Decimal,部分行业要求使用Decimal,从性能上可以考虑使用int存分为单位的金额。除部分情况,不建议使用double和float

 

以上参考《高性能MySQL》

 

在架构上。今天刚学到一个公司中的数据隔离方式。

可以通过表隔离或者逻辑隔离的方式将不同公司间的数据进行隔离。

1.表隔离:每间小公司都有自己的客户数据表,所有小公司的客户数据表的结构都是一样的,但是只有自己对应的客户。

2.逻辑隔离:所有小公司都共用同一张数据表,不同小公司间的客户通过一个公司自己特殊的编号Org_ID来进行区分。即表中添加一个新的column”org_id“

例子:

       假设有一家总司,旗下有很多小公司。

       现在总公司要统计客户数据。如果公司用的是逻辑隔离,就可以直接查询。总公司可以很方便地通过一张表查到全部客户数据,但是数据一旦很多就会导致查询速度变慢。如果用的是表隔离,就相当于每间小公司都有一个自己的客户表,每家小公司可以很方便的只统计和管理自己的客户。但是当要统计所有公司加起来的客户时,就要每间公司都上报自己的客户数量最后再汇总,加长了流程,不方便全局统计。

因此是否使用orgid看公司需求。每个小公司自己建表会占用更多资源,但是方便管理。由总公司建表会方便公司统计但是不方便查询。各有好坏

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值