查询性能
PSQuery Performance
我有以下型号:
A
1
|
*
B
^ ^
| |
B1 B2
其中 B 是 B1 和 B2 的抽象超类。我现在有一个像这样的 PSQuery:
var data = es.PSQuery<A>().Where(..).SelectMany(x => x.Bs).ToList();
生成的 SQL 如下所示:
SELECT ALIAS.ID FROM B ALIAS WHERE ....
然后 MDriven 获取块中的所有鉴别器以确定对象的类型,因此这些可能相当多 SQLs:
SELECT ALIAS.ID, ALIAS.DISCRIMINATOR FROM B ALIAS WHERE ID in (?, ? ....)
现在 MDriven 知道类型并可以加载数据。总而言之,这个过程比手工制作的时间要长得多 SQL。所以我的问题是:
- 我可以从 PSQuery 中获取 SQL 以便我自己执行吗?在这种情况下,我构建了一个非常复杂的表达式,我真的更喜欢构建 PSQuery 而不是构建 SQL 字符串。
- 如果 MDriven 会在第一个 SQL 中加载描述符,则不需要延迟加载。我们为此 table 使用自定义 OR-Mapping。是否可以将鉴别器包含在第一个SQL中?
- 是否有不同的提示来防止这种耗时的加载行为(保持模型不变)?
首先:如果您需要多个 类 的结果集(抽象结果集),您的加载时间将受益于子 类 parent 映射(子类写成一个-parent-table)
要从 PSQuery 中获取生成的 SQL:
var sqltext = this.EcoSpace.OclPs.ReturnPlatformQuery(null, vars, model.OclPS);
您可以拥有 Parent、Child 或自己的 Sub类 映射。
当你拥有“自己”时,你会得到每个子类 1 table + 每个超类 1 table。在这种情况下,我们首先根据鉴别器减少到特定的 ids——然后获取每个子类的数据
我有以下型号:
A
1
|
*
B
^ ^
| |
B1 B2
其中 B 是 B1 和 B2 的抽象超类。我现在有一个像这样的 PSQuery:
var data = es.PSQuery<A>().Where(..).SelectMany(x => x.Bs).ToList();
生成的 SQL 如下所示:
SELECT ALIAS.ID FROM B ALIAS WHERE ....
然后 MDriven 获取块中的所有鉴别器以确定对象的类型,因此这些可能相当多 SQLs:
SELECT ALIAS.ID, ALIAS.DISCRIMINATOR FROM B ALIAS WHERE ID in (?, ? ....)
现在 MDriven 知道类型并可以加载数据。总而言之,这个过程比手工制作的时间要长得多 SQL。所以我的问题是:
- 我可以从 PSQuery 中获取 SQL 以便我自己执行吗?在这种情况下,我构建了一个非常复杂的表达式,我真的更喜欢构建 PSQuery 而不是构建 SQL 字符串。
- 如果 MDriven 会在第一个 SQL 中加载描述符,则不需要延迟加载。我们为此 table 使用自定义 OR-Mapping。是否可以将鉴别器包含在第一个SQL中?
- 是否有不同的提示来防止这种耗时的加载行为(保持模型不变)?
首先:如果您需要多个 类 的结果集(抽象结果集),您的加载时间将受益于子 类 parent 映射(子类写成一个-parent-table)
要从 PSQuery 中获取生成的 SQL:
var sqltext = this.EcoSpace.OclPs.ReturnPlatformQuery(null, vars, model.OclPS);
您可以拥有 Parent、Child 或自己的 Sub类 映射。 当你拥有“自己”时,你会得到每个子类 1 table + 每个超类 1 table。在这种情况下,我们首先根据鉴别器减少到特定的 ids——然后获取每个子类的数据