本文简单介绍一下 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…