我必须在从db中获取的实体上插入一个子节点并保存更新后的实体。
没有。实体:10000 子女人数:17000(每个实体一个或多个子女,每个实体不是17000个。)
我尝试过使用查询缓存,但是在每次运行15毫秒的1000个查询之后,每1000次插入时间翻倍。
我尝试过获取所有实体并使用查询缓存,但是从缓存中获取10000也非常慢。
我该如何解决? 我必须按名称获取实体查询,附加新子项并保存。
修改
我为所有操作使用一个Session。我基本上有一对文件作为输入对 “实体名称”| “孩子的名字”
在我的UI中,我创建了一个AddChildTo(entityName,childName)操作列表。 在我的WCF背后的服务中,我枚举了所有操作,并且每个操作都根据entityName检索实体,根据childName创建一个新的Child,将子项添加到实体并保存实体。
事务包含要执行的所有操作,因为如果一个操作失败,则必须删除所有操作。
我创建一个秒表并花时间做1000次操作。每1000次操作时间翻倍。
在方法中创建一个仅执行查询以检索实体的秒表我意识到查询是增加最终总时间的部分。
这些是为每个孩子执行的查询:
INSERT INTO Child
(Codice, EntityId, CabinaUid, ComuneUid, Nota1, Nota2, Nome,
Descrizione, Master, ColoreMaster, ValidFrom,ValidUntil,
Uid, EntityType)
VALUES ('IT022E00355269' /* @p0 */,
9333 /* @p1 */,
'00000000-0000-0000-0000-000000000000' /* @p2 */,
'00000000-0000-0000-0000-000000000000' /* @p3 */,
NULL /* @p4 */,
NULL /* @p5 */,
'IT022E00355269' /* @p6 */,
'IT022E00355269' /* @p7 */,
0 /* @p8 */,
0 /* @p9 */,
'01/01/0001 00:00:00' /* @p10 */,
NULL /* @p11 */,
'5c40f801-489d-459f-81ca-0cb53655e50f' /* @p12 */,
'Child')
select SCOPE_IDENTITY()
and
SELECT this_.Id as Id14_0_,
this_.Codice as Codice14_0_,
this_.Interruttore as Interrut4_14_0_,
this_.CabinaUid as CabinaUid14_0_,
this_.ComuneUid as ComuneUid14_0_,
this_.Nota1 as Nota7_14_0_,
this_.Nota2 as Nota8_14_0_,
this_.Nome as Nome14_0_,
this_.Descrizione as Descriz10_14_0_,
this_.Master as Master14_0_,
this_.ColoreMaster as ColoreM12_14_0_,
this_.ValidFrom as ValidFrom14_0_,
this_.ValidUntil as ValidUntil14_0_,
this_.Uid as Uid14_0_
FROM Entity this_
WHERE this_.Nome = 186034 /* @p0 */
and ((this_.ValidUntil is null
or this_.ValidUntil > '01/01/0001 00:00:00' /* @p1 */)
and this_.ValidFrom <= '01/01/0001 00:00:00' /* @p2 */)
答案 0 :(得分:0)
诊断性能问题:
答案 1 :(得分:0)
关于你是如何做的,没有足够的信息,但这里有一些在NH中处理大型数据集的一般技巧:
我认为查询缓存不会帮助你(可能我不理解你的用例)