数据库读写操作优化

单服务器能处理百万级/天的数据,那么如何可以让数据处理的更快呢?

一、表设计

  1. 实际应用中,允许数据库冗余,例如:A表包含a,b,c三个字段,B表也可以同时包含这三个字段。这样可以尽量避免联表查询
  2. 所有删除都要是软删除,因为硬删除会影响索引和硬盘的使用
  3. 关联字段要写清楚,每个表里的关联字段都是用统一的名称
  4. 当遇到多对多关系时,最好能建立关系表,例如,老师和学生的关系
  5. 当遇到状态混存的时候,可以用$2^n$方法,例如:一个用户同时是A,B,C状态,A用$2^0$代替,B用$2^1$代替,C用$2^2$代替,这样此用户只需要存7,就能代替A,B,C三种状态了,当然代码中需要做与操作,得到A,B,C
  6. 如果一张表,写和读操作都很多(建立了很多索引),则可以建立临时表,此临时表不加索引,只插入一天或一周的数据,之后做个定时任务,把此表中的数据在凌晨存储到历史表,并且清空临时表
  7. 数据库三范氏,一般实际开发都满足不了
  8. 如果有一个页面不需要实时数据,且当sql的关联表很多的时候,这时候sql会执行很慢,解决方法是可以写定时任务,把需要查询的数据放到一张新表里,之后直接查新表的数据

二、索引设计

  1. 索引是能不建立就不建立,因为会使数据库写操作的速度变慢
  2. 查询次数多的字段做索引,会是读操作变快
  3. 要建在数据差异性大的字段上,例如:0和1不需要建立索引
  4. 如果一张表,经常做插入操作,则减少此表的索引量

三、数据类型设计

  • int类型是最快的数据类型,例如:时间戳存int类

四、sql语句优化

  1. 如果有索引的话,要尽量避免不走索引的sql语句
  2. 避免硬删除,是会改变索引
  3. sql语句最左原则,写where语句时,压缩量大的放在前边

喜欢做饭的PHP开发

附言 1  ·  1个月前

数据库

优化

大春儿
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!