忽忽呀 2023-12-26 23:37 采纳率: 50%
浏览 13

go的gorm和xorm查询耗时疑问

同样的sql语句查询用不同的orm,但是执行时间确实天差地别。

gorm写法


package main

import (
    "fmt"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
    "gorm.io/gorm/logger"
    "log"
    "os"
    "time"
)

type LiveComment struct {
    Id int `gorm:"column:id"`
}

var PlDb *gorm.DB

func InitPlDb() {

    var err error

    dsn := 此处省略连接信息
    PlDb, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
        Logger: logger.New(
            log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
            logger.Config{
                SlowThreshold: time.Second, // 慢 SQL 阈值
                LogLevel:      logger.Info, // Log level
                Colorful:      false,       // 禁用彩色打印
            },
        ),
    })
    if err != nil {
        log.Fatalf("plDb connection failed:%q", err.Error())
    }

    sqlDB, err := PlDb.DB()
    if err != nil {
        log.Fatalf("plDb get db failed:%q", err.Error())
    }

    err = sqlDB.Ping()
    if err != nil {
        log.Fatalf("plDb ping failed:%q", err.Error())
    }

}

func main() {

    InitPlDb()

    startTime := time.Now()
    var row LiveComment
    PlDb.Table("live_comment").Where("id = ?", 9069553).First(&row)
    endTime := time.Now()
    s := endTime.Sub(startTime)
    fmt.Println(s)
    // 输出97.318792ms
}

xorm写法

```go
package main

import (
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/go-xorm/xorm"
    "log"
    "time"
)

type LiveComment struct {
    Id int `xorm:"column:id"`
}

var PlDb *xorm.Engine

func InitPlDb() {

    var err error
    PlDb, err = 省略连接信息
    if err != nil {
        log.Fatalf("Mysql connection failed:%q", err.Error())
    }

    err = PlDb.Ping()
    if err != nil {
        log.Fatalf("Mysql connection failed:%q", err.Error())
    }
}

func main() {

    InitPlDb()

    startTime := time.Now()
    var row LiveComment
    PlDb.Table("live_comment").Where("id = ?", 9069553).Get(&row)
    endTime := time.Now()
    s := endTime.Sub(startTime)
    fmt.Println(s)
    // 输出47.3425ms
}


上面是用gorm写的,查询的耗时是97.318792ms。同样的查询用xorm写,耗时确只有47.3425ms。有知道的可以给解答一下吗

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-27 12:46
    关注

    【相关推荐】



    • 这篇博客: Go数据库操作:4、xorm包-增删改查中的 3、原生sql+ORM 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

            sql和Limit函数配合使用:

      	var ptlog []PtTimelineLog
      	err = engine.Sql("SELECT * FROM log").Limit(5, 2).Find(&ptlog)
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 12月26日

悬赏问题

  • ¥15 该如何接线运行这个交通灯程序?
  • ¥15 java:opc正常字段读取时,突然出现0错误,之后恢复正常后,无法继续读取字段
  • ¥15 jscolor 赋值input 没能引起前边色框的颜色变化2
  • ¥15 c# modbustcp 汇川 读写mx地址值
  • ¥15 C# Soket UnsafeNclNativeMethods.OSSOCK.recv 错误
  • ¥15 Ubuntu 在sudo reboot之后的报错
  • ¥15 有偿求抢运动场地的插件
  • ¥100 驱动程序在\device\raidport1 上检测到控制器错误
  • ¥15 JS报错变量未定义,如何解决?
  • ¥20 找辅导 初学者 想实现一个项目 没有方向