垂直分表
  对于一张很大的数据表,比如user表,username,password,age等字段是经常被使用到的字段,可以放在一张表中,表中其他不太常用的字段(不会拿来当作查询条件的字段),如person_info,profile等可以拿出到一张单独的表中进行存储,这样可以保证主表在数据量很大的时候性能下降不会太严重。
  架构层
  1.配置mysql集群,完成数据的读写分离
  基本原理:1.master记录自己改变了的记录的二进制文件(binlog),在每个事务执行完毕之后,将这些改变记录在二进制文件中;2.在slave上存在两个进程:读取master上的二进制文件到自己的中继文件中,在中继文件中读取更新的事件内容并同步到自己的数据库中
  可以使用mysql官方提供的代理层产品完成MysqlProxy相关的功能:https://segmentfault.com/a/11...
  sql语句层进行优化 从给定的题目出发
  字段:在进行数据的查询的时候,在查询字段的选择上,使用 对应的字段代替 select *
  条件:在sql语句的条件的书写的时候,条件的排列顺序应该是以字段上的数据差异性较大的列排列在左端,也是能够区分出更少数据的列优先排列在左端。比如说在常规的业务逻辑下,age字段应该在sex 字段的左侧
  分页:在后台的数据进行分页的时候,每页显示150条数据,在查看10000页的数据的时候肯定会很慢,使用 where id > 1500000 limit 150的写法代替 limit 10000,150 .这样可以极大的提高查询的速度
  在只查询一条数据的时候,使用limit 1,这样mysql在进行搜索的时候,找到了一条数据不会在乡下进行搜索
  子查询:在执行一条资查询:select ... from t1 where t1.uid IN (select uid from t2 ),这条子查询相当于select ... from t1 where exists(select 1 from t2 where t2.uid=t1.id).这样一来相当于将两个结果集中的数据做乘法,相比于连接查询,速度会很慢
  连表查询:将复杂的联表sql语句改写成针对于单表的sql查询语句
  注意数据的饮食转换。比如说查询的字段的类型为varchar,那么在写where条件的时候,where name='11' 会比 where name=11更快,因为传入的字段类型是int,会导致程序进行全表扫描