之前数据库设计的做得不好的几个点总结-mysql

 

1.表中所有字段必须都是NOT NULL属性,业务可以根据需要定义DEFAULT值。

anull的列MySQL内部需要更多的特殊处理,消耗更多资源;

b)对null 的处理时候,只能采用is nullis not null,而不能采用=in<<>!=not in这些操作符号。如:where status!=1,查询结果不会包含status为null值的记录,另外:负向查询条件:、!=、NOT IN、NOT LIKE等,会导致全表扫描,避免使用

2.避免使用blob、text等大字段,如果必须使用,应垂直拆分到分表,扩展表里,仅在需要读这些对象的时候才去select。

3.时间类型尽量选取timestamp,datetime占用8字节,timestamp仅占用4字节,但是范围为1970-01-01 00:00:01到2038-01-01 00:00:00。也可选用int来存储时间,使用SQL函数unix_timestamp()和from_unixtime()来进行转换,但可读性差。

4.存储金钱的字段,建议用int,程序端乘以100和除以100进行存取。

因为int占用4字节,而double占用8字节,空间浪费,且小数容易导致钱对不上.

5.水平分表尽量用取模方式,日志、报表类数据建议采用日期进行分表。

6.数据库本身库、表、列所有字符集必须保持一致,为utf8或utf8mb4,否则容易索引失效。建议mysql服务端my.cnf做默认配置

[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
7.禁止使用存储过程、视图、触发器、Event,禁止超过3-5张表的join。

解读:高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。过多的join可能较多的nested loop,消耗较多CPU

8.用INT存储IP,节省存储空间,SQL提供有的两个IP转换函数:select inet_aton('192.168.148.128'); select inet_ntoa(3232236044);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值