<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-26801181.post114626350234965876..comments</id><updated>2008-04-07T19:44:48.806+02:00</updated><title type='text'>Comments on Programación PL/SQL y bases de datos Oracle: Puesta a punto de sentencias SQL (Tuning - 1)</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.plsql.biz/feeds/114626350234965876/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26801181/114626350234965876/comments/default'/><link rel='alternate' type='text/html' href='http://www.plsql.biz/2006/04/puesta-punto-de-sentencias-sql-tuning.html'/><author><name>Pepelu</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-26801181.post-204832025833517110</id><published>2008-04-07T19:44:48.806+02:00</published><updated>2008-04-07T19:44:48.806+02:00</updated><title type='text'>Primero intentaría modificar la consulta utilizand...</title><content type='html'>Primero intentaría modificar la consulta utilizando en todos los &lt;I&gt;OR&lt;/I&gt; alguna columna pura (sin función) sobre la que existiese un índice (&lt;I&gt;first_name&lt;/I&gt; o &lt;I&gt;last_name&lt;/I&gt;) para ver si de alguna manera me valen los resultados entregados.&lt;BR/&gt;&lt;BR/&gt;Si necesitas algún &lt;I&gt;OR&lt;/I&gt; donde ambos &lt;I&gt;AND&lt;/I&gt; utilicen funciones sobre campos de la tabla, entonces yo añadiría nuevas columnas a la tabla cuyo contenido sean los valores de las funciones y luego crearía índices para las parejas de datos que comparas en los diferentes &lt;I&gt;OR&lt;/I&gt;.&lt;BR/&gt;&lt;BR/&gt;No es una solución muy "limpia" pero es la única forma en la que puedes evitar el &lt;I&gt;full scan&lt;/I&gt;.&lt;BR/&gt;&lt;BR/&gt;Ten en cuenta que a lo mejor el optimizador no es lo suficientemente inteligente para aplicar un índice diferente a cada &lt;I&gt;OR&lt;/I&gt;, pero lo que si puedes hacer es dividir la consulta en varias, una para cada &lt;I&gt;OR&lt;/I&gt;, y posteriormente utilizar el comando &lt;I&gt;UNION&lt;/I&gt; para unirlas, de esta manera el optimizador podrá usar diferentes índices.&lt;BR/&gt;&lt;BR/&gt;Creo que si tienes más dudas lo mejor es que usemos el email (pepelublog[arroba]gmail[punto]com).</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26801181/114626350234965876/comments/default/204832025833517110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26801181/114626350234965876/comments/default/204832025833517110'/><link rel='alternate' type='text/html' href='http://www.plsql.biz/2006/04/puesta-punto-de-sentencias-sql-tuning.html?showComment=1207590288806#c204832025833517110' title=''/><author><name>Pepelu</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18072941500668390493'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.plsql.biz/2006/04/puesta-punto-de-sentencias-sql-tuning.html' ref='tag:blogger.com,1999:blog-26801181.post-114626350234965876' source='http://www.blogger.com/feeds/26801181/posts/default/114626350234965876' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-7704285288764429869</id><published>2008-04-07T18:52:26.030+02:00</published><updated>2008-04-07T18:52:26.030+02:00</updated><title type='text'>hola nuevamente pepelu.Gracias x haber contestado ...</title><content type='html'>hola nuevamente pepelu.&lt;BR/&gt;&lt;BR/&gt;Gracias x haber contestado a mi pregunta y pues realmente tienes razón ya que no fuí del todo explicita en lo que te quería preguntar.&lt;BR/&gt;&lt;BR/&gt;Mi consulta la estoy realizando sobre una sola tabla y mi objetivo es utilizarla en un procedimiento para obtener de acuerdo a un nombre tecleado los registros que más se le parezcan a dicho nombre. La consulta es la siguiente:&lt;BR/&gt;&lt;BR/&gt;SELECT /*+first_rows*/ /*+ INDEX(CYT_USUARIO_IDX1) */ UPPER (FIRST_NAME), UPPER(LAST_NAME), UPPER (SECOND_LAST_NAME), OPRID FROM CYT_USUARIOS&lt;BR/&gt;WHERE FIRST_NAME = nombres_aux&lt;BR/&gt;AND LAST_NAME = paterno_aux&lt;BR/&gt;OR SUBSTR(FIRST_NAME,1,4) = SUBSTR(nombres_aux,1,4)&lt;BR/&gt;AND SUBSTR(LAST_NAME,1,4) = SUBSTR(paterno_aux,1,4)&lt;BR/&gt;OR SUBSTR(FIRST_NAME,1,1) =  DECODE(instr(nombres_aux,' '),0,'',SUBSTR(nombres_aux,(INSTR(nombres_aux,' ')+1),1))&lt;BR/&gt;AND SUBSTR(LAST_NAME,1,4) = SUBSTR(paterno_aux,1,4)&lt;BR/&gt;OR SUBSTR(FIRST_NAME,(INSTR(FIRST_NAME,' ')+1),1) = SUBSTR(nombres_aux,1,1)&lt;BR/&gt;AND LAST_NAME = paterno_aux&lt;BR/&gt;OR SOUNDEX(FIRST_NAME) = SOUNDEX(nombres_aux)&lt;BR/&gt;AND SOUNDEX(LAST_NAME) = SOUNDEX(paterno_aux)&lt;BR/&gt;&lt;BR/&gt;El problema que tengo es de concurrencia ya que como te comente la utilizo en un procedimiento y hay ocasiones que es utilizado hasta por 10 personas.&lt;BR/&gt;&lt;BR/&gt;La he analizado mediante el explain plan y cuando utilizo el substr o el soundex hace un full table y aumenta el costo.&lt;BR/&gt;&lt;BR/&gt;Espero haber sido explicita y de antemano agradezco tu respuesta y te felicito por tu blogg, esta super chido y no sabes la gran ayuda que aportas a los no tan expertos como tu</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26801181/114626350234965876/comments/default/7704285288764429869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26801181/114626350234965876/comments/default/7704285288764429869'/><link rel='alternate' type='text/html' href='http://www.plsql.biz/2006/04/puesta-punto-de-sentencias-sql-tuning.html?showComment=1207587146030#c7704285288764429869' title=''/><author><name>marel</name><uri>http://www.blogger.com/profile/12547216133500531425</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.plsql.biz/2006/04/puesta-punto-de-sentencias-sql-tuning.html' ref='tag:blogger.com,1999:blog-26801181.post-114626350234965876' source='http://www.blogger.com/feeds/26801181/posts/default/114626350234965876' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-1134362748847180449</id><published>2008-04-05T13:45:50.707+02:00</published><updated>2008-04-05T13:45:50.707+02:00</updated><title type='text'>Marel,Tu pregunta no resulta sencillo de contestar...</title><content type='html'>Marel,&lt;BR/&gt;&lt;BR/&gt;Tu pregunta no resulta sencillo de contestar con los datos que aportas. &lt;BR/&gt;&lt;BR/&gt;Si estas enlazando dos tablas y para enlazarlas necesitas utilizar una función sin poder utilizar ningún índice, entonces podrías crear un índice de tipo función, o bien crear una columna con el resultado de la función, crear un índice sobre dicha columna y después enlazar las tablas utilizando esa columna.&lt;BR/&gt;&lt;BR/&gt;En cuanto a los índices de tipo función sólo sé que existen pero nunca los he utilizado. Aquí te dejo un ejemplo:&lt;BR/&gt;&lt;BR/&gt;CREATE INDEX nombre_mayuscula&lt;BR/&gt;ON tabla_nombres (UPPER(nombre));&lt;BR/&gt;&lt;BR/&gt;Este tipo de índices requieren que el parámetro QUERY_REWRITE_ENABLED este puesto a TRUE.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26801181/114626350234965876/comments/default/1134362748847180449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26801181/114626350234965876/comments/default/1134362748847180449'/><link rel='alternate' type='text/html' href='http://www.plsql.biz/2006/04/puesta-punto-de-sentencias-sql-tuning.html?showComment=1207395950707#c1134362748847180449' title=''/><author><name>Pepelu</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18072941500668390493'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.plsql.biz/2006/04/puesta-punto-de-sentencias-sql-tuning.html' ref='tag:blogger.com,1999:blog-26801181.post-114626350234965876' source='http://www.blogger.com/feeds/26801181/posts/default/114626350234965876' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-2419831644215473263</id><published>2008-04-05T01:21:36.972+02:00</published><updated>2008-04-05T01:21:36.972+02:00</updated><title type='text'>hola.como puede reducir el costo de una sentencia ...</title><content type='html'>hola.&lt;BR/&gt;&lt;BR/&gt;como puede reducir el costo de una sentencia si en el where utilizo un substr o un soundex</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26801181/114626350234965876/comments/default/2419831644215473263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26801181/114626350234965876/comments/default/2419831644215473263'/><link rel='alternate' type='text/html' href='http://www.plsql.biz/2006/04/puesta-punto-de-sentencias-sql-tuning.html?showComment=1207351296972#c2419831644215473263' title=''/><author><name>marel</name><uri>http://www.blogger.com/profile/12547216133500531425</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.plsql.biz/2006/04/puesta-punto-de-sentencias-sql-tuning.html' ref='tag:blogger.com,1999:blog-26801181.post-114626350234965876' source='http://www.blogger.com/feeds/26801181/posts/default/114626350234965876' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-8674097707089001592</id><published>2007-08-16T18:27:45.398+02:00</published><updated>2007-08-16T18:27:45.398+02:00</updated><title type='text'>Gracias Evilblues.El order de las tablas en el FRO...</title><content type='html'>Gracias Evilblues.&lt;BR/&gt;&lt;BR/&gt;El order de las tablas en el &lt;I&gt;FROM&lt;/I&gt; es importante cuando se utiliza el &lt;I&gt;hint ORDERED&lt;/I&gt; (SELECT /*+ ORDERED */), en cuyo caso el optimizador intentará unir las tablas siguiendo el orden en que aparecen las tablas en el &lt;I&gt;FROM&lt;/I&gt;. Esta es una de las formas más utilizadas a la hora de optimizar una sentencia SQL o PL/SQL.&lt;BR/&gt;&lt;BR/&gt;Si no se utiliza este &lt;I&gt;hint&lt;/I&gt; entonces el optimizador utilizará el orden que tenga un coste menor (si estamos utilizando el optimizador basado en costes) o el que tenga una menor prioridad (si utilizamos el &lt;A HREF="http://www.plsql.biz/2007/07/el-optimizador-plsql-basado-en-normas.html" REL="nofollow"&gt;optimizador SQL basado en normas&lt;/A&gt;). En este caso, el orden de las tablas en el &lt;I&gt;FROM&lt;/I&gt; sólo influiría si existiesen dos planes de ejecución con el mismo coste o la misma prioridad, en cuyo caso el optimizador Oracle eligiría el que más se aproxime al orden del &lt;I&gt;FROM&lt;/I&gt;.&lt;BR/&gt;&lt;BR/&gt;En el ejemplo que propones el orden no es importante, el optimizador accederá primero a la tabla empleados buscando los empleados que se apellidan Martínez y luego procederá a unir dichos registros con la tabla departamento.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26801181/114626350234965876/comments/default/8674097707089001592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26801181/114626350234965876/comments/default/8674097707089001592'/><link rel='alternate' type='text/html' href='http://www.plsql.biz/2006/04/puesta-punto-de-sentencias-sql-tuning.html?showComment=1187281665398#c8674097707089001592' title=''/><author><name>Pepelu</name><uri>http://www.blogger.com/profile/00891045835734721638</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18072941500668390493'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.plsql.biz/2006/04/puesta-punto-de-sentencias-sql-tuning.html' ref='tag:blogger.com,1999:blog-26801181.post-114626350234965876' source='http://www.blogger.com/feeds/26801181/posts/default/114626350234965876' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-26801181.post-601081349467686232</id><published>2007-08-07T14:43:30.407+02:00</published><updated>2007-08-07T14:43:30.407+02:00</updated><title type='text'>Buenas,buen blog el tuyo,eso lo primeroen el caso ...</title><content type='html'>Buenas,&lt;BR/&gt;&lt;BR/&gt;buen blog el tuyo,eso lo primero&lt;BR/&gt;&lt;BR/&gt;en el caso de que en el FROM hubiese dos tablas y estas se unieran de forma correcta...el orden de las tablas en el FROM influye en algo? y el orden de las condiciones del WHERE?&lt;BR/&gt;&lt;BR/&gt;Por ej,&lt;BR/&gt;&lt;BR/&gt;FROM empleados e , departamento d&lt;BR/&gt;WHERE e.apellidos='martinez'&lt;BR/&gt;e.id_dept = d.dept_id ;&lt;BR/&gt;&lt;BR/&gt;es mejor poner el "e.id_dept = d.dept_id" antes del e.apellidos='martinez'?&lt;BR/&gt;&lt;BR/&gt;es que tengo esta duda y no se si haras un "SQL TUNING 2 " o algo asi jeje&lt;BR/&gt;&lt;BR/&gt;saludos!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26801181/114626350234965876/comments/default/601081349467686232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26801181/114626350234965876/comments/default/601081349467686232'/><link rel='alternate' type='text/html' href='http://www.plsql.biz/2006/04/puesta-punto-de-sentencias-sql-tuning.html?showComment=1186490610407#c601081349467686232' title=''/><author><name>evilblues</name><uri>http://www.blogger.com/profile/15178498873721132609</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.plsql.biz/2006/04/puesta-punto-de-sentencias-sql-tuning.html' ref='tag:blogger.com,1999:blog-26801181.post-114626350234965876' source='http://www.blogger.com/feeds/26801181/posts/default/114626350234965876' type='text/html'/></entry></feed>