Comprendre le plan d'exécution d'une requête
-
22-07-2019 - |
Question
J'ai ce SQL:
SELECT
*
FROM
Requisicao r
join convenio c on c.idconvenio = r.idconvenio
join empresa e on e.idempresa = c.idempresa
Lorsque je l'exécute, je reçois ce plan d'exécution:
PLAN JOIN (C NATURAL,E INDEX (INTEG_160),R INDEX (INTEG_318))
Ce qui signifie que l'index de Convenio n'a pas été utilisé (chaque table a ses index)
J'aimerais comprendre un peu mieux le problème afin d'améliorer certains problèmes de performances de ce système.
Merci.
La solution
Qu'est-ce qui ne va pas pour vous? Parce que vous n’avez aucune condition (clause WHERE), le serveur lira naturellement une table, c’est-à-dire de la toute première ligne à la dernière. Compte tenu de la sélectivité d’index, servi, il a été décidé qu’il serait préférable de lire c et de joindre les enregistrements de e et r.
Autres conseils
Je suis d'accord avec Andrei. Si convenio.idconvenio a une faible sélectivité, le plan est bon.