2009-03-13 6 views
1

Je possède ce SQL:Comprendre le plan d'exécution d'une requête

SELECT 
    * 
FROM 
    Requisicao r 
    join convenio c on c.idconvenio = r.idconvenio 
    join empresa e on e.idempresa = c.idempresa 

Quand je l'exécute, je reçois ce plan d'exécution:

PLAN JOIN (C NATURAL,E INDEX (INTEG_160),R INDEX (INTEG_318)) 

Que signifie que l'indice de Convenio n'a pas été utilisé (tous les la table a ses index)

Je voudrais le comprendre un peu mieux ainsi je peux améliorer quelques problèmes de performance que j'ai avec ce système.

Merci.

Répondre

3

Qu'est-ce qui ne va pas? Parce que vous n'avez aucune condition (clause WHERE), le serveur lit naturellement une table, c'est-à-dire de la toute première ligne à la dernière. Tenant compte de la sélectivité de l'indice, il a été décidé qu'il serait préférable de lire de c et de joindre les enregistrements de e et r.

0

Je suis d'accord avec Andrei. Si convenio.idconvenio a une faible sélectivité, le plan est bon.