Comprensione del piano di esecuzione di una query
-
22-07-2019 - |
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.
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.