sql nhibernate 循环性能
sql nhibernate performance for loop
我有以下逻辑:
遍历 ID 列表,获取关联的实体,对于该实体,循环遍历另一个 ID 列表并获取另一个实体。代码如下:
foreach (var docId in docIds)
{
var doc = new EntityManager<Document>().GetById(docId);
foreach (var tradeId in tradeIds)
{
var trade = new EntityManager<Trade>().GetById(tradeId);
if (doc.Trade.TradeId != trade.TradeId)
{
Document newDoc = new Document(doc, trade, 0);
new EntityManager<Document>().Add(newDoc);
}
}
}
我的问题主要是关于 sql 性能。显然会有一堆 selects
发生,还有一些 adds
。这是做这样的事情的坏方法吗?
我是否应该使用 session
并获取与 ID 列表匹配的所有实体的列表(使用 1 select 语句)然后循环?
这仅取决于我的经验。但是你可以自己测试一下。
如果 Trade 实体不是很大并且实体数量不会超过 1000 - 读取所有实体并在之后循环将更可取。
如果计数大于 1k - 最好调用包含你的 ID 的临时 table 的存储过程。
我有以下逻辑:
遍历 ID 列表,获取关联的实体,对于该实体,循环遍历另一个 ID 列表并获取另一个实体。代码如下:
foreach (var docId in docIds)
{
var doc = new EntityManager<Document>().GetById(docId);
foreach (var tradeId in tradeIds)
{
var trade = new EntityManager<Trade>().GetById(tradeId);
if (doc.Trade.TradeId != trade.TradeId)
{
Document newDoc = new Document(doc, trade, 0);
new EntityManager<Document>().Add(newDoc);
}
}
}
我的问题主要是关于 sql 性能。显然会有一堆 selects
发生,还有一些 adds
。这是做这样的事情的坏方法吗?
我是否应该使用 session
并获取与 ID 列表匹配的所有实体的列表(使用 1 select 语句)然后循环?
这仅取决于我的经验。但是你可以自己测试一下。 如果 Trade 实体不是很大并且实体数量不会超过 1000 - 读取所有实体并在之后循环将更可取。 如果计数大于 1k - 最好调用包含你的 ID 的临时 table 的存储过程。