L'Eliminazione delle Tabelle in MariaDB

La prima cosa che fa l'ottimizzatore di MariaDB è un merge tra la definizione della vista e la query:

select ACRAT_rating
from
  ac_anchor
  left join ac_name on ac_anchor.AC_ID=ac_name.AC_ID
  left join ac_dob on ac_anchor.AC_ID=ac_dob.AC_ID
  left join ac_rating on (ac_anchor.AC_ID=ac_rating.AC_ID and
                          ac_rating.ACRAT_fromdate = 
                            (select max(sub.ACRAT_fromdate)
                             from ac_rating sub where sub.AC_ID = ac_rating.AC_ID))
where
 ACNAM_name='Gary Oldman'

E' importante capire che la query ottenuta ha una parte inutile:

  • left join ac_dob on ac_dob.AC_ID=... estrae esattamente un record:
    • primary key(ac_dob.AC_ID) garantisce che ci sia al massimo una corrispondenza per ciascun valore di ac_anchor.AC_ID,
    • e se una corrispondenza non c'è, LEFT JOIN genera una "riga" contenente valori NULL
  • ma non ci interessa il record corrispondente, perché ac_dob non è usato in altre parti della query.

Questo significa che la parte left join ac_dob on ... può essere rimossa dalla query senza problemi, ed è questo che fa l'Eliminazione delle Tabelle. La logica della ricerca di tabelle da eliminare è piuttosto intelligente, per esempio sarebbe capace di rimuovere anche left join ac_rating on ... , insieme alla subquery (nell'esempio sopra non verrà rimossa perché ac_rating è presente nella lista dei campi da selezionare). Il modulo Table Elimination è anche in grado di gestire Outer Join annidate e Outer Join multi-tabella.

Vedi anche

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.