Explain plan amb SQL Developer

Una tasca que de tant en tant apareix és la d’optimitzar una query d’SQL. No és cap broma. L’optimització de les querys pot marcar la diferència entre l’èxit i el fracàs d’un projecte.
 
En el meu entorn professional la Base de Dades, amb majúscules, és Oracle.
 
L’optimització de querys en Oracle és una tasca sobre la que s’han escrit llibres i es fan cursos i és més pròpia de DBAs i especialistes en bases de Dades, tanmateix, tot programador, tard o d’hora, ha d’enfrontrar-se amb l’optimització d’alguna query.
 
I llavors el primer pas és obtenir el pla d’execució de la query. Amb el pla d’execució es pot saber quin indexos (fa servir indexos! bé!) es fan servir per fer les cerques o si , pel contrari, s’estan recorrent taules senceres sense cap indexació (un full scan! dolent!).
 
L’execution plan per a una query és una cosa tan senzilla com fer
 
explain plan for "la meva query"
 
on "la meva query" és la select complexa i obscura que es nega a executar-se ràpidament.
 
El resultat de l’explain plan es volca en la taula plan_table, per tant, el següent pas és obtenir una còpia legible del que s’ha volcat en la taula i saber-ho interpretar correctament.
 
Tot això és port fer amb l’sqlplus, l’eina estàndar d’Oracle. Ara bé, no conec a ningú que la faci servir habitualment i, en canvi, es habitual fer servir eines tipus TOAD, PLSQL Developer o, una de (no tant) recent, lliure  i que proveeix la mateixa Oracle: l’SQL Developer, que està feta amb ajava i que cada cop m’agrada més.
 
Algunes d’aquestes eines ja porporcionen directament un volcat de l’explain plan en un format legible.
 
En el cas de SQL Developer, la cosa consisteix en
 
1 – executar explain plan for "la meva query"
2 – exportar la taula plan_table en un format úitl, per exemple en format excel (xls).
 
Una millora és fer l’explain plan indicant explícitament la taula a la que volem volcar el pla. Això és interessant perquè plan_table és una taula general en la que se volquen els plans d’execució per defecte si no s’especifica el destí. I cal esborrar-la a ma, o sigui que si fas un volcat de plan_table sense més, molt possiblement trobaràs plans d’execució de querys que no són la teva.
 
Volcar el plan d’execució a una taula pròpia es fa amb
 
explain plan into "la meva taula" for "la meva query"
 
I amb això ja podem començar a optimitzar. Però fer un curs d’optimmització tampoc no estaria de més.