我有一个大型的自引用表 Items。项目有父项目,像这样:
ITEMS
Long id
String name
String type
Long parentId (fk. ref Items)
使用是非循环的(所以它是树的表示,而不是图)。
现在,我需要尝试找到某个项目。假设我需要找到类型为“TV”、名称为“海绵宝宝”的项目,以及类型为“电影”且名称为“42”的父项。
我的问题是:哪种方式更好(速度最重要)?
首先选择所有类型为“Movie”且名称为“42”的项目,然后选择类型为“TV”、名称为“海绵宝宝”以及与第一个查询列表匹配的父 ID 的项目
单个 HQL 数据库交互,如下所示:
SELECT i from ItemModel i WHERE i.type="TV" AND i.name="Spongebob" AND i.parent.type="TV" AND i.parent.name="42"
现在,#1 将需要更多的数据库交互(在本例中为 2 与 1,但有可能达到 3 或 4 级深度),所以我倾向于认为 #2 会更有效。但是,我不确定 mysql 如何优化这些查询,并且我担心 #2 查询实际上可能会更慢,对自引用连接执行。
将不胜感激任何输入。