【问题标题】:What does 'separate' in sequelize mean?sequelize 中的“分离”是什么意思?
【发布时间】:2016-10-24 04:51:39
【问题描述】:

我在sequelize的官方文档中搜索,找不到任何关于'separate'的条目。https://readthedocs.org/search/?q=separate

我也在谷歌上搜索过,但没有成功。

  db.fooTable.find({
        where: {
            id: id
        },
        include: [{
            model: db.barTable1,
            separate: true
        }, {
            model: db.barTable2,
            separate: true
        }, {
            model: db.barTable3,
            separate: true
        }]
    })

为了找出它的含义,我将'separate'设置为false,但查询的结果与我输入'true'时的结果相同。

【问题讨论】:

    标签: sequelize.js


    【解决方案1】:

    我在current code 中找到了这个:

    如果为 true,则运行单独的查询以获取关联的实例,仅支持 hasMany 关联

    详细说明:默认情况下,为了检索相关模型实例,Sequelize 将使用 SQL JOIN。通过启用separate,Sequelize 将对每个关联模型执行单独的查询,并在代码中连接生成的文档(而不是让数据库执行连接)。

    假设我有一个hasManyTag 模型关联的Product 模型(“一个产品可以有许多与之关联的标签”)。

    这是“常规”查询:

    SELECT
      `product`.`id`,
      `product`.`title`,
      `tags`.`id` AS `tags.id`,
      `tags`.`name` AS `tags.name`,
      `tags`.`productId` AS `tags.productId`
    FROM `products` AS `product`
    LEFT OUTER JOIN `tags` AS `tags`
    ON 
      `product`.`id` = `tags`.`productId`;
    

    这里是separate : true 查询:

    SELECT 
      `product`.`id`,
      `product`.`title`
    FROM `products` AS `product`;
    
    SELECT
      `id`,
      `name`,
      `productId`
    FROM `tags` AS `tag`
    WHERE 
      `tag`.`productId` IN (1);
    

    【讨论】:

    • 这个查询如何帮助我们获取带有一些指定标签作为参数的产品?
    • 有什么好处?从您所写的内容来看,我只能看到性能成本的不利影响,因为它在代码端而不是在数据库内部部分执行!?
    • @C4d 请参阅 this answer 了解其存在的可能原因。
    • @robertklep 谢谢。我昨天遇到另一个问题真是巧合。由于最大 63 的字符限制,我有太多的连接,以至于别名被剪掉了。“分离”也有点解决这个问题(除了全新的选项“minifyAliases”)。
    【解决方案2】:

    @robertklep 回复的补充:

    如您所知,它分隔了一个否则加入的查询。

    这意味着在您有许多连接和嵌套连接的某些情况下它会更高效(在某些情况下可能会产生巨大影响)。嵌套连接使 Sequelize 在单个大查询中比运行多个小查询花费更多时间。问题被指出为去重操作:

    请看这里: Slow associations in SequelizeJS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2017-06-11
      • 2018-03-05
      • 2023-03-27
      相关资源
      最近更新 更多