这两种Gorm查询方式之间有何区别?

时间:2020-10-21 13:19:48

标签: postgresql go go-gorm go-pg

我将Go和Gorm用于Postgresql。

我想了解两者之间的区别

  1. 此:

    var name = "myName"
    var user User
    
    db.Where("user like ?", name).Find(&user)
    
  2. 和这个:

    var user User
    
    db.Where("user like " + name).Find(&user)
    

SQL查询是相同的。

我的意思是,为什么我们要使用ORM?

  1. 第一名可以成为准备好的陈述吗?

  2. 排名第一的广告是否比排名第二的广告“更优化”?

  3. “更优化”是什么意思?

1 个答案:

答案 0 :(得分:1)

要专门回答您的问题:

第一名可以成为准备好的陈述吗?

通常,ORM将构建准备好的语句,以便(如Flimzy所解释的那样)您可以避免sql注入,并且DB引擎不需要重新计算查询计划。

Gorm似乎具有用于缓存准备好的语句的特定配置: https://gorm.io/docs/v2_release_note.html#Prepared-Statement-Mode

排名第一的广告是否比排名第二的广告“更优化”?

您可以从数据库和语言角度看这部分。

  • 数据库:因为如果您一次又一次地执行相同的查询,#1将使用准备好的语句,则db引擎不需要重新计算查询(重新使用准备好的语句)
  • 语言:Golang将为"user like"创建一个字符串,然后为串联"user like" + name创建另一个字符串。如果此代码多次执行(例如在循环中),您将看到执行时间增加,仅仅是因为每个字符串都意味着分配了新的内存地址。

“更优化”是什么意思?

更多优化意味着更快。 如上所述:

  • 准备好的语句仅有助于计算一次查询计划,这意味着下次执行同一查询时,无需通过数据库引擎节省时间来计算该计划。 (您通常会在复杂的查询中看到这种差异)
  • 语言字符串连接可能会消耗资源