【发布时间】:2016-12-20 18:07:21
【问题描述】:
我有一个表 FOLDERS,定义了类似目录结构的东西。它包含以下列: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 行。
【问题讨论】:
-
在查询前加上解释,用结果编辑您的问题。同时显示表格定义
-
如果您无法更改查询,那么您几乎没有选择。如果您可以从查询中取出
ORs,那么您拥有可能 对您有帮助的所有索引。ORs 几乎消除了 MySQL 中的索引使用。
标签: mysql performance indexing mysql-5.1