0

我有一个表 FOLDERS,定义了类似目录结构的东西。它包含以下列:ID、PARENT_ID 和 LINK_ID。

我无法更改我现在遇到问题的应用程序,查询速度很慢。

此应用程序有一个逻辑,即 PARENT_ID 可以同时引用 IDLINK_ID。

此外,我无法更改查询,我发现这会减慢整个 ETL 过程:

SELECT  folders.ID AS OrigFolderID, parentfolder.ID, parentfolder.Name 
FROM    folders 
          LEFT JOIN folders AS parentfolder ON folders.ParentID=parentfolder.ID OR folders.ParentID=parentfolder.LinkID
WHERE   folders.ID IN                (112450385,188823933,211307470,211403833,211545367,212449523,212539966)

但是,我们可以更改数据库,删除或添加索引。

有没有机会加快这个查询?

似乎“父文件夹”上的索引不起作用(LinkID、ParentId 和 ID(这是一个主键)上有索引,并且该表已被完全扫描。其中有 200K 行。

4

1 回答 1

1

我假设ID并且LinkID每个都被索引。

OR是凶手。你必须想办法改变查询;没有调整等,可以解决性能问题。

LEFT很可疑——如果没有父母,你想要 NULL 吗?

OR可以变成UNION DISTINCT两个选择 - 一个OR带有.

于 2016-12-21T17:30:21.837 回答