我有一个很大的自引用表项。项目有父项目,如下所示:
ITEMS
Long id
String name
String type
Long parentId (fk. ref Items)
使用是非圆形的(因此它是树的表示,而不是图形)。
现在,我需要尝试找到某个项目。假设我需要找到类型为“TV”的项目,并命名为“Spongebob”,父类型为“Movie”,名称为“42”。
我的问题是:哪种方式更好(速度最重要)?
首先选择所有类型为“电影”且名称为“42”的项目,然后选择类型为“TV”的项目,名称为“Spongebob”,以及与第一个查询中的列表匹配的父ID < / p>
单个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查询可能实际上更慢,对自引用连接做了。
非常感谢任何意见。
答案 0 :(得分:0)
第一个比你想象的更好。
如果查询太慢,您可以在文本字段上尝试哈希索引。