MySQL 使用 OR 条件将 table 与自身连接起来
MySQL join table with itself with OR condition
我有一个 table 文件夹,定义了 smth 之类的目录结构。它包含以下列:ID、PARENT_ID 和 LINK_ID.
我现在无法更改查询速度慢的问题的应用程序。
此应用程序的逻辑是 PARENT_ID 可以同时引用 ID 或 LINK_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(这是一个主键)上都有索引,并且table被完全扫描.里面有200K行
我假设 ID
和 LinkID
都已编入索引。
OR
是杀手。您必须想办法更改查询;没有调整等可以解决性能问题。
LEFT
是可疑的 -- 如果没有 parent 是否要 NULL?
OR
可以变成两个选择的 UNION DISTINCT
-- 一个在 OR
的任一侧。
我有一个 table 文件夹,定义了 smth 之类的目录结构。它包含以下列:ID、PARENT_ID 和 LINK_ID.
我现在无法更改查询速度慢的问题的应用程序。
此应用程序的逻辑是 PARENT_ID 可以同时引用 ID 或 LINK_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(这是一个主键)上都有索引,并且table被完全扫描.里面有200K行
我假设 ID
和 LinkID
都已编入索引。
OR
是杀手。您必须想办法更改查询;没有调整等可以解决性能问题。
LEFT
是可疑的 -- 如果没有 parent 是否要 NULL?
OR
可以变成两个选择的 UNION DISTINCT
-- 一个在 OR
的任一侧。