单服务器能处理百万级/天的数据,那么如何可以让数据处理的更快呢?
一、表设计
- 实际应用中,允许数据库冗余,例如:A表包含a,b,c三个字段,B表也可以同时包含这三个字段。这样可以尽量避免联表查询
- 所有删除都要是软删除,因为硬删除会影响索引和硬盘的使用
- 关联字段要写清楚,每个表里的关联字段都是用统一的名称
- 当遇到多对多关系时,最好能建立关系表,例如,老师和学生的关系
- 当遇到状态混存的时候,可以用2n2n方法,例如:一个用户同时是A,B,C状态,A用2020代替,B用2121代替,C用2222代替,这样此用户只需要存7,就能代替A,B,C三种状态了,当然代码中需要做与操作,得到A,B,C
- 如果一张表,写和读操作都很多(建立了很多索引),则可以建立临时表,此临时表不加索引,只插入一天或一周的数据,之后做个定时任务,把此表中的数据在凌晨存储到历史表,并且清空临时表
- 数据库三范氏,一般实际开发都满足不了
- 如果有一个页面不需要实时数据,且当sql的关联表很多的时候,这时候sql会执行很慢,解决方法是可以写定时任务,把需要查询的数据放到一张新表里,之后直接查新表的数据
二、索引设计
- 索引是能不建立就不建立,因为会使数据库写操作的速度变慢
- 查询次数多的字段做索引,会是读操作变快
- 要建在数据差异性大的字段上,例如:0和1不需要建立索引
- 如果一张表,经常做插入操作,则减少此表的索引量
三、数据类型设计
- int类型是最快的数据类型,例如:时间戳存int类
四、sql语句优化
- 如果有索引的话,要尽量避免不走索引的sql语句
- 避免硬删除,是会改变索引
- sql语句最左原则,写where语句时,压缩量大的放在前边