You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.3 KiB
51 lines
1.3 KiB
2 years ago
|
# Hints
|
||
|
|
||
|
![CI](https://github.com/go-gorm/hints/workflows/CI/badge.svg)
|
||
|
|
||
|
Optimizer/Index/Comment Hints support for GORM
|
||
|
|
||
|
## Optimizer Hints
|
||
|
|
||
|
```go
|
||
|
import "gorm.io/hints"
|
||
|
|
||
|
DB.Clauses(hints.New("hint")).Find(&User{})
|
||
|
// SELECT * /*+ hint */ FROM `users`
|
||
|
```
|
||
|
|
||
|
## Index Hints
|
||
|
|
||
|
```go
|
||
|
import "gorm.io/hints"
|
||
|
|
||
|
DB.Clauses(hints.UseIndex("idx_user_name")).Find(&User{})
|
||
|
// SELECT * FROM `users` USE INDEX (`idx_user_name`)
|
||
|
|
||
|
DB.Clauses(hints.ForceIndex("idx_user_name", "idx_user_id").ForJoin()).Find(&User{})
|
||
|
// SELECT * FROM `users` FORCE INDEX FOR JOIN (`idx_user_name`,`idx_user_id`)"
|
||
|
|
||
|
DB.Clauses(
|
||
|
hints.ForceIndex("idx_user_name", "idx_user_id").ForOrderBy(),
|
||
|
hints.IgnoreIndex("idx_user_name").ForGroupBy(),
|
||
|
).Find(&User{})
|
||
|
// SELECT * FROM `users` FORCE INDEX FOR ORDER BY (`idx_user_name`,`idx_user_id`) IGNORE INDEX FOR GROUP BY (`idx_user_name`)"
|
||
|
```
|
||
|
|
||
|
## Comment Hints
|
||
|
|
||
|
```go
|
||
|
import "gorm.io/hints"
|
||
|
|
||
|
DB.Clauses(hints.Comment("select", "master")).Find(&User{})
|
||
|
// SELECT /*master*/ * FROM `users`;
|
||
|
|
||
|
DB.Clauses(hints.CommentBefore("insert", "node2")).Create(&user)
|
||
|
// /*node2*/ INSERT INTO `users` ...;
|
||
|
|
||
|
DB.Clauses(hints.CommentAfter("select", "node2")).Create(&user)
|
||
|
// /*node2*/ INSERT INTO `users` ...;
|
||
|
|
||
|
DB.Clauses(hints.CommentAfter("where", "hint")).Find(&User{}, "id = ?", 1)
|
||
|
// SELECT * FROM `users` WHERE id = ? /* hint */
|
||
|
```
|