一. 合理建表
1. 三大范式:
- 每个字段具有原子性
- 表中的数据确保每列都和主表有关系
- 每个字段都和主键列有直接的关系(方便业务也可以适当不遵守)
二. 优化sql语句
- 在语句中不使用*
- 尽量不使用子查询 , 使用连接表来代替(join)
- 减少使用in , not in 使用exists 或者关联语句代替
- or的语句使用union , union all 代替
可以参考如下:https://www.cnblogs.com/cnzxy/p/9392721.html
三. 建立索引 (在常用于条件的列上建立索引)
-
单一索引 : 单一条件的情况下建立单一索引
-
复合索引 : 多个条件的情况下建立符合索引
<1. 短索引 : 1-2列
<2. 长索引 : 2列以上
创建索引 :create index idx1 on table1(col1,col2,col3)
注意事项 :1、对于复合索引,在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高;
2、复合索引创建几个字段那么要想使用索引就必须使用创建索引的字第一个段 , 否则不会使用索引
3、索引数量不宜太多 , 否则在表更新的时候会花费较大的时间来创建索引
4、在创建单一索引和复合索引的时候 , 如果单一索引在复合索引中存在 , 我们可以在单一索 引的基础上建立符合索引 , 而不是在复合索引存在的情况下重新创建单一索引
理解参考:https://www.cnblogs.com/summer0space/p/7247778.html
四. 分表分库
分表 : (一般数据量超过1000万条以后就需要分库分表)
- 水平分表:
就是将一张数据多的表分为很多张数据少的表 , 也就是按照数据条数分
基本算法 : ( i d > > 20 ) 每 张 表 的 i d 都 是 唯 一 的 , 按 照 一 定 的 算 法 来 进 行 分 表 , ( id >>20) 每张表的id都是唯一的 , 按照一定的算法来进行分表 , ( id>>20)每张表的id都是唯一的,按照一定的算法来进行分表,(id >>20)的含义就是把id号
右移 20次 , 那么2的20次方就是1048576 , 所以我们每张表里存放1048576条数据 ,
可以分为没有封顶张表, 那么我们的表从0开始 , 可以一直往下排 , 假如我们的一条
数据在0~1048576里 , 那就在我们的编号为0表里 , 如果id编号1048576~2097152
里那么就在我们编号为1的表中存放 - 垂直分表:
将一张大表的字段换到别的表中 , 可以按照冷热来进行拆分
分库 : 分库和分表的拆法差不多 , 只不过是解决的问题不一样
分表 : 主要是解决高并发 , 数据查询慢的问题
分库 : 主要是为了解决数据库服务器并发的问题 , 防止服务器宕机