数据库优化心得
1. 减少过长查询语句
MySQL服务器与客户端通信方式是半双工的,因此应该尽量减少发送过长的查询语句 以及减少响应数据的大小(例如避免select *)最好加上limit 分页限制
2. 查询缓存
查询缓存
对于写密集型的最好不要打开查询缓存,来缓存查找的结果
查询缓存不易过大,最好不要超过100MB
尽量用小表代替大表
如果使用缓存,尽量是批量插入数据,而不是逐条插入数据
使用缓存来缓存查询数据,尽量是使用命令行的方式,不要去修改数据库的配置
3. 数据类型
数据类型
尽量小而简单
尽量不要用字符串来存储
不要使用text
尽量不动该表的结构
在建立索引的字段上,要使用NOT NULL
不要使用浮点型
表的列尽量不要过多
4. 索引
索引
尽量建立的索引即满足查询要求,又满足排序要求
建立索引的依据,是经常使用某个字段为查询依据
查询时,尽量不要用索引字段表达式 (sql不认识,无法解析)
尽量不要在一个表中,建立太多索引,建立索引本身就是对写入性能的降低,而且太多索引并不能提高检索效率,
查询条件包含多个索引时
and关系,会优化查询
or关系。会增加CPU的计算,反而降低查询效率
索引不利于插入更新数据,因为插入或者更新数据,不仅要对数据库的记录操作,还要维护索引表的结构,对索引表进行更新
5. 连接查询
连接查询
尽量不要使用连接查询
如果使用连接查询,最好使用索引字段来关联
6. limit
如果偏移量很大,尽量使用延迟关联
延迟关联:先利用条件检索出是索引字段的查询结果集,用该查询结果集在去查询所需要的结果集
或者使用条件来代替,偏移量
7. 大量的数据处理
7.1 分片架构的算法
范围法
哈希法
7.2 将大量数据进行分表,分库
垂直拆分
将一个业务的不同属性,进行分表或者分库存储
水平拆分
按照业务的不同时间或者规则,将数据分表或者分库处理
特点:同一个分片里的数据库集群
多个实例库本身没有直接的关联
多个实例库的结构(水平拆分)完全相同
多个实例库的数据之间没有交集
线性的提高了数据库的写入能力