GORM 已经优化了许多东西来提高性能,其默认性能对大多数应用来说都够用了。但这里还是有一些关于如何为您的应用改进性能的方法。
禁用默认事务
对于写操作(创建、更新、删除),为了确保数据的完整性,GORM 会将它们封装在一个事务里。但这会降低性能,你可以在初始化时禁用这种方式
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ |
缓存预编译语句
执行任何 SQL 时都创建并缓存预编译语句,可以提高后续的调用速度
// 全局模式 |
注意 也可以参考如何为 MySQL 开启 interpolateparams 以减少 roundtrip https://github.com/go-sql-driver/mysql#interpolateparams
带 PreparedStmt 的 SQL 生成器
Prepared Statement 也可以和原生 SQL 一起使用,例如:
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ |
您也可以使用 GORM 的 API DryRun 模式 编写 SQL 并执行 prepared statement ,查看 会话模式 获取详情
选择字段
默认情况下,GORM 在查询时会选择所有的字段,您可以使用 Select
来指定您想要的字段
db.Select("Name", "Age").Find(&Users{}) |
或者定义一个较小的 API 结构体,使用 智能选择字段功能
type User struct { |
迭代、FindInBatches
用迭代或 in batches 查询并处理记录
Index Hints
Index 用于提高数据检索和 SQL 查询性能。 Index Hints
向优化器提供了在查询处理过程中如何选择索引的信息。与 optimizer 相比,它可以更灵活地选择更有效的执行计划
import "gorm.io/hints" |
读写分离
通过读写分离提高数据吞吐量,查看 Database Resolver 获取详情