Domanda

Ho questo SQL:

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

Quando lo eseguo ottengo questo piano di esecuzione:

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

Cosa significa che l'indice Convenio non è stato utilizzato (ogni tabella ha i suoi indici)

Vorrei capirlo un po 'meglio in modo da poter migliorare alcuni problemi di prestazioni che sto riscontrando con questo sistema.

Grazie.

È stato utile?

Soluzione

Cosa ti sembra sbagliato? Poiché non si ha alcuna condizione (clausola WHERE), il server leggerà una tabella in modo naturale, vale a dire dalla prima riga all'ultima. Prendendo in considerazione la selettività dell'indice servita, è stato deciso che sarebbe stato meglio leggere da c e unire i record da e ed r.

Altri suggerimenti

Sono d'accordo con Andrei. Se convenio.idconvenio ha una bassa selettività, il piano va bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top