大项目性能检查 | 青训营笔记

73 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天

在青训营大项目开发的最后阶段,我们队伍对程序整体的数据库交互进行了检查。检查出一些可能造成性能问题的sql语句,并进行了修复。

由于我们使用的是gorm框架,默认情况下无法得知其内部自动生成的sql语句。所以经过资料的查阅,我们首先需要配置gorm的log输出等级。

一般情况下,我们都是直接使用gorm.Open函数,直接创建数据库连接,没有对它进行额外的配置。而要修改log等级,就需要在Open函数的第二个参数位置提供相应的配置Logger:logger.Default.LogMode(logger.Info),

Db, err = gorm.Open(mysql.Open(fmt.Sprintf("%s:%s@%s(%s)/%s?charset=%s&parseTime=%v&loc=%s",
		DbConf.Username,
		DbConf.Password,
		DbConf.Net,
		DbConf.Addr,
		DbConf.DbName,
		DbConf.Charset,
		DbConf.ParseTime,
		DbConf.Loc,
	)), &gorm.Config{
		Logger:logger.Default.LogMode(logger.Info),
	})

这样就可以将gorm框架所执行的每一个sql指令都进行输出。这时我们可以手动将指令进行explain,检查索引的使用情况。

经过检查,发现了我们项目中的一些比较不合理的使用sql的地方。

YCteGAwSBv.jpg

在此处,其他队员对语句进行了没必要的Count操作。这个场景中,我们判断是否点赞,只需要知道有没有符合条件的行就可以了,而不需要知道具体的数量。如果数据量增大,将会对mysql造成没有必要的压力。

除此之外,还发现我们在对视频进行发布时间倒序排序的时候,没有使用索引。

096f2060-f422-43cc-a82e-53e82f8867ce.jpeg

因为不存在update的情景,所以我们的视频的自增id就可以代表发布的时间。而id为主键,主键自带唯一索引,所以我们后期将ORDER BY的字段改为id。

通过本次青训营的大项目,让我更加清楚地了解到了一些项目实际开发中需要进行的必要步骤,在发布前对项目进行代码检查,性能测试等等。