从大型自引用表(HQL)中选择的最佳方法

时间:2013-04-29 21:46:16

标签: mysql hql self-reference

我有一个很大的自引用表项。项目有父项目,如下所示:

ITEMS
Long id
String name
String type
Long parentId (fk. ref Items)

使用是非圆形的(因此它是树的表示,而不是图形)。

现在,我需要尝试找到某个项目。假设我需要找到类型为“TV”的项目,并命名为“Spongebob”,父类型为“Movie”,名称为“42”。

我的问题是:哪种方式更好(速度最重要)?

  1. 首先选择所有类型为“电影”且名称为“42”的项目,然后选择类型为“TV”的项目,名称为“Spongebob”,以及与第一个查询中的列表匹配的父ID < / p>

  2. 单个HQL数据库交互,类似于:

    SELECT i from ItemModel i WHERE i.type="TV" AND i.name="Spongebob" AND i.parent.type="TV" AND i.parent.name="42"
    
  3. 现在,#1将需要更多的数据库交互(在这种情况下,2对1,但有可能有3或4级深度),所以我倾向于认为#2会更有效率。但是,我不确定mysql如何优化这些查询,我担心#2查询可能实际上更慢,对自引用连接做了。

    非常感谢任何意见。

1 个答案:

答案 0 :(得分:0)

第一个比你想象的更好。

如果查询太慢,您可以在文本字段上尝试哈希索引。