mysql 高可用 2

本文探讨了数据库设计中避免使用NULL的原因,对比了DATETIME与TIMESTAMP类型的适用场景,提出了索引设计的原则与规范,包括单个索引字段数及单表索引数量限制,并讨论了SQL编写和运维方面的最佳实践。
摘要由CSDN通过智能技术生成
关于为什么定义不使用Null的原因
1.浪费存储空间,InnoDB需要有额外一个字节存储

2.如果表内默认值Null过多,也会影响优化器选择执行计划


关于使用datatime和timestamp,现在在5.6.4之后又有了变化,使用二者存储在存储空间上大差距越来越小 ,并且本身datatime存储范围就比timestamp大很多,timestamp只能存储到2038年


索引规范单个索引字段数不超过5 单张表索引数量不超过5 索引设计遵循B+ Tree索引最左前缀匹配原则 选择区分度高的列作为索引 建立的索引能覆盖80%主要的查询,不求全,解决问题的主要矛盾。 DML和order by和group by字段要建立合适的索引 避免索引的隐式转换 避免冗余索引


关于索引规范,一定要记住索引这个东西是一把双刃剑,虽然能加速读,但也会有很多额外的写入和锁,降低写入能力。这也是为什么要控制索引数原因,之前看到过不少例子 在表里每个字段都建了索引,其实对查询可能起不到什么作用


冗余索引例子
idx_a_b_c(a,b,c) 
idx_a(a)   冗余
idx_a_b(a,b) 冗余
隐式转换
字段:`remark` varchar(50) NOT Null
 MySQL>SELECT `id`, `gift_code` FROM gift WHERE`deal_id` = 640 AND remark=115127; 
1 row in set (0.14 sec) MySQL>SELECT `id`, `gift_code` FROM pool_gift WHERE `deal_id` = 640 AND remark=‘115127’; 1 row in set (0.005 sec) 
字段定义为varchar,但传入的值是个int,就会导致全表扫描,要求程序端要做好类型检查


SQL类规范 
尽量不使用存储过程、触发器、函数等 
避免使用大表的JOIN,MySQL优化器对join优化策略过于简单
避免在数据库中进行数学运算 和其他大量计算任务
SQL合并,主要是指的DML时候多个value合并,减少和数据库交互
合理的分页,尤其大分页
UPDATE、DELETE语句不使用LIMIT ,容易造成主从不一致


运维规范
SQL审核,DDL审核和操作时间,尤其是OnlineDDL
高危操作检查,Drop做好数据备份
权限控制和审计
日志分析,主要是指的MySQL慢日志和错误日志
高可用方案
数据备份方案


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值