0

我有一个大型的自引用表 Items。项目有父项目,像这样:

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

使用是非循环的(所以它是树的表示,而不是图)。

现在,我需要尝试找到某个项目。假设我需要找到类型为“TV”、名称为“海绵宝宝”的项目,以及类型为“电影”且名称为“42”的父项。

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

  1. 首先选择所有类型为“Movie”且名称为“42”的项目,然后选择类型为“TV”、名称为“海绵宝宝”以及与第一个查询列表匹配的父 ID 的项目

  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"
    

现在,#1 将需要更多的数据库交互(在本例中为 2 与 1,但有可能达到 3 或 4 级深度),所以我倾向于认为 #2 会更有效。但是,我不确定 mysql 如何优化这些查询,并且我担心 #2 查询实际上可能会更慢,对自引用连接执行。

将不胜感激任何输入。

4

1 回答 1

0

第一个比你想象的要好。

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

于 2013-04-30T00:58:43.927 回答