J'ai une table FOLDERS, définissant smth comme structure de répertoire. Il contient les colonnes: ID, PARENT_ID et LINK_ID.Table de jointure MySQL avec elle-même avec la condition OU
Je ne peux pas changer l'application que j'ai un problème maintenant avec une requête lente.
Cette application a une logique que PARENT_ID pourrait se référer à la fois à l'ID ou LINK_ID.
Aussi, je ne peux pas changer la requête, que j'ai trouvé Ralentit l'ensemble de notre processus 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)
Nous pouvons changer la base de données cependant, la suppression ou l'ajout d'index.
Y a-t-il une chance d'accélérer cette requête?
Il semble que les index sur "parentfolder" ne fonctionnent pas (il y a des index sur LinkID, sur ParentId et sur ID (qui est une clé primaire), et la table est entièrement scannée. .
Mettez un expliquer avant la requête éditez votre question avec les résultats. Également afficher les définitions de table – Mihai
Si vous ne pouvez pas changer la question, vous êtes à peu près à court d'options. Vous avez tous les index qui pourraient vous aider si vous pouviez retirer les OR de la requête. 'OR's pratiquement éliminer l'utilisation de l'index dans MySQL. – Uueerdo