为什么 NHibernate QueryOver 与 Eager Fetching 会生成多个 SQL 查询?
NHibernate QueryOver with Fetch 导致多个 SQL 查询
查询问题:
使用时QueryOver 使用预先加载来获取相关列表,会发生多次数据库命中,从而导致大量单独的SQL 查询。
示例:
Session.QueryOver<UserRole>() .Fetch(x => x.UsersInRole).Eager .List();
说明:
此行为是由于许多原因造成的 -对多关系。在示例映射中,UserRole 实体与 UsersInRole 实体具有多对多关系。当使用预加载时,NHibernate 会尝试为每个检索到的 UserRole 实体加载所有相关的 UsersInRole 实体。
但是,由于会话可能尚未包含所有相关实体,因此会发出多个 SQL 查询来检索这些关系。初始查询检索 UserRole 实体,并为每个 UserRole 发出后续查询以检索其相关的 UsersInRole 实体。
解决方案:
一种最小化 SQL 查询的有效解决方案就是使用批量抓取。通过在 HasManyToMany 映射上设置 BatchSize 属性,NHibernate 可以在单个 SQL 查询中获取多个相关实体。
HasManyToMany(x => x.UsersInRole) ... .BatchSize(25)
通过将批处理大小设置为适当的值(例如 25),NHibernate 将发出限制 SQL 查询数量,减少数据库总命中率并提高性能。
另外,在 Class 上设置批量大小地图还可以帮助优化整体抓取策略。
以上是为什么 NHibernate QueryOver 与 Eager Fetching 会生成多个 SQL 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器)

哪些流行的MySQL GUI工具(例如MySQL Workbench,PhpMyAdmin)是什么?
