关于最近的一些数据库优化的经验分享(后续将持续更新)

      最近新接手公司一个锅,活跃用户在八千左右,但是活跃时间段非常集中,数据量的话,多个表数据在500万以上最多的大概是九百多万的样子,交给我时后台某个列表页面打开需要1.8min,前台排行榜及某些统计页面常年处于数据库请求超时的状态。

       因为是基于TP5的项目,在接手后第一时间将一些查询在请求时加了缓存,并将原有的缓存引擎切换为redis,对某些重复的查询有了显著的提高,但是对于一些主要的问题影响不大。以下是一些细节性的问题解决:

1. mysql查询时,where条件里带有大于或小于这些条件时,原本会走range索引,但如果查询(select)的字段里面有未索引字段或者字段索引失效时会导致 range失效

2.对于时间段查询比较频繁的,表分区会有明显提升

3.标签类数据存储,在数据库设计时一定要用字典表形式,千万千万不要逗号分隔存字符串。。。

4.排行榜类型要防止重复查询,目前实现为单进程锁查询后存redis的形式

5.innodb引擎在带有大范围where条件查询时会导致锁表,由于这些表需要事务保证一致性,后面计划用从库改为myisam表的形式(待考虑)

6.除了标签类,某些日志类表可以把用户id等一些无需range的字段做hash索引,效果明显

发布了17 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wufantastic/article/details/102645783