续集中的“分离”意味着什么?

时间:2016-06-22 10:02:57

标签: sequelize.js

我搜索了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”的结果相同。

2 个答案:

答案 0 :(得分:8)

我在current code

中找到了这个
  

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

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

假设我的Product模型与hasMany模型有Tag关联(“产品可以有许多与之关联的标记”)。< / p>

这是“常规”查询:

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);

答案 1 :(得分:0)

@robertklep响应的补充:

您现在知道,它分隔了一个否则联接的查询。

这意味着在某些情况下,如果您具有许多联接和嵌套联接(在某些情况下可能会产生巨大影响),它将更有表现。嵌套联接使Sequelize在单个大查询中比在运行多个小查询上花费更多的时间。指出此问题为重复数据删除操作:

请参阅此处: Slow associations in SequelizeJS