MySQL 将表与自身与 OR 条件连接起来



我有一个表文件夹,定义类似smth的目录结构。它包含以下列: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)

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

是否有机会加快此查询速度?

似乎"parentfolder"上的索引不起作用(LinkID,ParentId和ID(这是主键)上有索引),并且表已完全扫描。其中有 200K 行。

我假设IDLinkID都被索引了。

OR是凶手。您必须找到更改查询的方法;没有调整等,可以解决性能问题。

LEFT是可疑的 - 如果没有父级,您是否想要 NULL?

OR可以变成两个选择的UNION DISTINCT- 一个具有OR的两侧。

相关内容

  • 没有找到相关文章

最新更新