MySQL连接表与OR条件

时间:2016-12-20 18:07:22

标签: mysql performance indexing mysql-5.1

我有一个表FOLDERS,定义类似目录结构的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)

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

有没有机会加快查询速度?

似乎“父文件夹”上的索引不起作用(LinkID,ParentId和ID(主键)上有索引,表格已完全扫描。其中有200K行。

1 个答案:

答案 0 :(得分:1)

我认为IDLinkID都已编入索引。

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

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

OR可以变成两个选择中的UNION DISTINCT - 一个位于OR的任意一侧。