Gorm 实践(二)| 青训营

219 阅读1分钟

本文简单介绍一下 Gorm 下处理 MySQL 的一些优化。

1. 最好的优化

设计好数据库结构,写好查询语句

一条好的查询语句的优化效果比得上以下任何优化

下面的都只是辅助作用

2. 启用 interpolateparams

可以为 MySQL 启用 interpolateparams 以减少往返

使用 interpolateParams=true 开启,直接加到连接字符串后面就行了

fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=utf8mb4&parseTime=true&loc=Local&interpolateParams=true"

3. 减少连表

连的表越多性能越差,除非没办法

4. 利用缓存, Redis

Redis 可以充当一个高效的缓冲区,设计好 Redis ,查询效率可以提高到毫秒级别。

5. 使用索引

对经常查询和排序的字段添加数据库索引,可以大大提高查询速度。使用 Gorm 的自动索引功能,或者手动为字段添加索引。同时对于唯一值建立唯一索引,加快查询速度。

优化器 / 索引提示

优化器提示允许控制查询优化器选择某个查询执行计划,GORM 通过 gorm.io/hints 支持它,例如:

import "gorm.io/hints"  
db.Clauses(hints.New("MAX_EXECUTION_TIME(10000)")).Find(&User{}) 

SELECT * /*+ MAX_EXECUTION_TIME(10000) */ FROM users 索引提示允许将索引提示传递到数据库,以防查询规划器感到困惑。

import "gorm.io/hints"  
db.Clauses(hints.UseIndex("idx_user_name")).Find(&User{}) 

SELECT * FROM users USE INDEX (idx_user_name)

还有一些其他的优化方法就不一一列举了,可以直接去看 Gorm 官方的 gorm.io/docs/indexe…