b'\n_START_ARTICLE_\nOptimizaci\xc3\xb3n de consultas\n_START_SECTION_\nImplementaci\xc3\xb3n\n_START_PARAGRAPH_\nLa mayor\xc3\xada de los optimizadores presentan los planes de ejecuci\xc3\xb3n como un \xc3\xa1rbol de nodos del plan. Un nodo del plan encapsula una operaci\xc3\xb3n simple en la ejecuci\xc3\xb3n de la consulta. Los resultados intermedios fluyen desde las hojas del \xc3\xa1rbol hacia la ra\xc3\xadz._NEWLINE_Los hijos de un nodo representan a las operaciones cuyas salidas son la entrada del nodo padre. Por ejemplo, un nodo \xe2\x80\x9cjoin\xe2\x80\x9d tendr\xc3\xa1 dos hijos, que representan a los dos operandos del \xe2\x80\x9cjoin\xe2\x80\x9d. Las hojas del \xc3\xa1rbol representan operaciones que producen resultados mediante b\xc3\xbasqueda en el disco, por ejemplo, realizando una b\xc3\xbasqueda indexada o una b\xc3\xbasqueda secuencial.\n_START_SECTION_\nTuplas\n_START_PARAGRAPH_\nUna tupla de una relaci\xc3\xb3n o de una tabla corresponde a una fila de aquella tabla. Las tuplas est\xc3\xa1n com\xc3\xbanmente desordenadas puesto que matem\xc3\xa1ticamente una relaci\xc3\xb3n se define como un conjunto y no como una lista. No existen tuplas duplicadas en una relaci\xc3\xb3n o tabla dado el hecho de que una relaci\xc3\xb3n es un conjunto y los conjuntos por definici\xc3\xb3n no permiten elementos duplicados._NEWLINE_Un corolario importante en este punto es que la llave primaria siempre existe dada la condici\xc3\xb3n de unicidad de las tuplas, por lo tanto, como m\xc3\xadnimo la combinaci\xc3\xb3n de todos los atributos de una tabla puede servir para la conformaci\xc3\xb3n de la llave primaria, sin embargo usualmente no es necesario incluir todos los atributos, com\xc3\xbanmente algunas combinaciones m\xc3\xadnimas son suficientes.\n_START_SECTION_\nEjemplo\n_START_PARAGRAPH_\nA continuaci\xc3\xb3n podemos observar un ejemplo de la problem\xc3\xa1tica de optimizaci\xc3\xb3n. En este simple problema tenemos tablas de \xe2\x80\x9cSuppliers\xe2\x80\x9d (S) y \xe2\x80\x9cOrders\xe2\x80\x9d (SP) con 100 administradores y 10\xc2\xa0000 pedidos._NEWLINE_Consulta: \xe2\x80\x9cObtener los nombres de los suministradores que nos sirven la pieza P2\xe2\x80\x9d. Consideraremos que s\xc3\xb3lo 50 tuplas de SP corresponden a la pieza P2._NEWLINE_SELECT DISTINCT S.NOMBREFROM S, SPWHERE S.S=SP.SAND SP.P="P2";_NEWLINE_En el anterior ejercicio tenemos un producto cartesiano S x SP 100 x 10.000 = 1.000.000 de tuplas le\xc3\xaddas. Probablemente 1.000.000 de tuplas escritas en memoria virtual. Cuando utilizamos la sentencia WHERE pasamos de 1.000.000 de tuplas le\xc3\xaddas a 50 tuplas, luego realizamos una proyecci\xc3\xb3n sobre S.NOMBRE, dando como resultado un m\xc3\xa1ximo de 50 tuplas.\n_START_SECTION_\nProcedimientos\n_START_PARAGRAPH_\nSeleccionar en SP las tuplas de la pieza P2. Se realizar\xc3\xa1 lectura de 10.000 tuplas dando como resultado: 50 tuplas. Hacer JOIN de la tabla anterior. Con la tabla S se realizara lectura de 100 tuplas, dando como resultado: 50 tuplas con proyecci\xc3\xb3n sobre S.NOMBRE, dando como resultado un m\xc3\xa1ximo de 50 tuplas.\n_START_SECTION_\nConversi\xc3\xb3n a forma can\xc3\xb3nica\n_START_PARAGRAPH_\nEn la conversi\xc3\xb3n can\xc3\xb3nica encontramos que hay optimizaciones previas que tienen un resultado positivo seguro. En este paso debemos encontrar la expresi\xc3\xb3n equivalente de una consulta dada en la que se mejore de alguna manera el rendimiento. Esta expresi\xc3\xb3n equivalente ser\xc3\xa1 la forma can\xc3\xb3nica de dicha consulta.\n_START_SECTION_\nGeneraci\xc3\xb3n y elecci\xc3\xb3n de planes de consulta\n_START_PARAGRAPH_\nCuando elegimos un plan una de las primeras cosas que debemos tener en cuenta para escogerlo es la estimaci\xc3\xb3n de costes. Estos costes dependen de muchos aspectos tales como el n\xc3\xbamero de operaciones de entrada/salida del disco requeridas, la utilizaci\xc3\xb3n de la CPU. Una consulta suele implicar la generaci\xc3\xb3n de resultados intermedios, estos resultados estar\xc3\xa1n directamente relacionados con el n\xc3\xbamero de entrada/salida.'