В GORM используется много оптимизаций для улучшения производительности и производительность по умолчанию должна быть достаточной для большинства приложений, но все же есть несколько советов, как улучшить ее для вашего приложения.
Отключить транзакцию по умолчанию
GORM выполняет операции записи (создание/обновление/удаление) внутри транзакции для обеспечения согласованности данных, что плохо сказывается на производительности, но вы можете отключить это поведение во время инициализации
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ |
Подготовленный кеш
Создает подготовленные данные при выполнении любого SQL и кэширует их для ускорения будущих вызовов
// глобальный режим |
NOTE Также смотрите https://github.com/go-sql-driver/mysql#interpolateparams, как включить параметр interpolateparams для MySQL, чтобы сократить количество запросов
Конструктор SQL с подготовкой
Подготовленный запрос работает также с сырым SQL, например:
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ |
Вы также можете использовать GORM API для подготовки SQL с DryRun Mode, и выполнить его с подготовленным запросом позже, смотрите режим сессии для получения подробной информации
Выбрать поля
По умолчанию GORM выбирает все поля при запросе, вы можете использовать Select
для указания нужных вам полей
db.Select("Name", "Age").Find(&Users{}) |
Or define a smaller API struct to use the smart select fields feature
type User struct { |
Итерация / Поиск в пакете
Query and process records with iteration or in batches
Подсказки индексирования
Index is used to speed up data search and SQL query performance. Index Hints
gives the optimizer information about how to choose indexes during query processing, which gives the flexibility to choose a more efficient execution plan than the optimizer
import "gorm.io/hints" |
Read/Write Splitting
Increase data throughput through read/write splitting, check out Database Resolver