Comunidad Oracle Hispana

Tips de Performance y Tuning

Información

Tips de Performance y Tuning

La idea de este grupo es compartir y armar entre todos una lista de tips o buenas prácticas sobre performance y tuning.

Miembros: 164
Última actividad: Ene 6

Por ejemplo, tengo la siguiente lista:

  1. Las condiciones (tanto de filtro como de join) deben ir siempre en el orden en que esté definido el índice. Si no hubiese índice por las columnas utilizadas, se puede estudiar la posibilidad de añadirlo, ya que tener índices de más sólo penaliza los tiempos de inserción, actualización y borrado, pero no de consulta. FALSO ver Primer Tip puesto a prueba
  2. Ojo con las consultas con muchas Joins, evitar cruzar muchas tablas. Por el mismo motivo se deben utilizar las vistas con mucho cuidado, puesto que provocan que se crucen muchas tablas inadvertidamente.
  3. Evitar la condiciones IN ( SELECT…) sustituyéndolas por joins.
  4. Colocar la tabla que devuelve menor número de registros en el último lugar del FROM. FALSO, parte se puede comprobar en Primer Tip puesto a prueba
  5. Si en la cláusula WHERE se utilizan campos indexados como argumentos de funciones, el índice quedará desactivado.
  6. Una condición negada con el operador NOT desactiva los índices
  7. Una consulta con la cláusula DISTINCT debe ser ordenada por el servidor aunque no se incluya la cláusula ORDER BY.
  8. Para escribir una condición de existencia no se hace un SELECT COUNT(*), se hace un SELECT 1
  9. Bind: Paso de parámetros por referencias.
  10. No se deben hacer SELECT *; SELECT a,b…

¿Que opinan de ellas? ¿se les ocurre alguna más?

Saludos Cordiales.

Foro de discusión

Séptimo Tip puesto a prueba.

Iniciada por Javier Morales Carreras Feb 21, 2014. 0 Respuestas

Hola a todos,Aporto mi granito de arena desmitificando el punto 7. "Una consulta con la cláusula DISTINCT debe ser ordenada por el servidor aunque no se incluya la cláusula ORDER BY."FALSO.A partir…Continuar

Primer Tip puesto a prueba!

Iniciada por Fernando Garcia. Última respuesta de Edgar J. Guzman M. Sep 27, 2012. 16 Respuestas

Tomando como punto de partida el primer tip publicado en la lista de Pablo Larraz: "Las condiciones (tanto de filtro como de join) deben ir siempre en el orden en que esté definido el índice. Si no…Continuar

Cuestionar y corroborar.

Iniciada por Fernando Garcia Oct 10, 2011. 0 Respuestas

Me parece muy interesante la aparicion de este grupo. Es un lugar propicio para debatir ideas.Propongo poner a prueba a cada uno de los tips publicados y corroborarlos a fin de poder llegar a la…Continuar

Muro de comentarios

Comentario de Gisela Velazco el octubre 10, 2011 a las 7:57pm

Buenisimo el grupo! FELICITACIONES Pablo! hago mi humilde aporte:

**Siempre comenzar por la tabla DRIVING si especificamos el hint ORDERED, ya que esta tabla tiene pocas filas, y a partir de ella podemos hacer JOIN a tablas mas grandes, a traves de indices.

**Siguiendo el tip anterior, si tenemos una tabla DRIVING pequeña, y accedemos a otra tabla grande por indice, seria conveniente elegir como metodo de acceso a USE_NL o use nested loop, de esta manera, por cada fila de la tabla driving, buscamos por indice en la tabla grande.

**Si accedemos a una tabla particionada y el campo de particion forma parte del where, pero se le aplica alguna operacion como TRUNC, se realizara un FULL SCAN a toda la tabla quedando desactivado el metodo de acceso por particion.

Comentario de Marcelo Burgos el octubre 10, 2011 a las 10:09pm

Hola a todos

 

Gisela, ¿what is la tabla driving? ¿me perdí de algo o se te mezcló algo del mysql?

 

Me parece que me estoy poniendo un poco duro para entender cosas avanzadas, y quizá sea tiempo por evaluar dedicarme a otra profesión en que haya que usar menos la cabeza

 

No, por ahora insistiré con Databases, así que trátenme con delicadeza y no me abrumen demasiado

 

¡Saludos!

Comentario de Gisela Velazco el octubre 10, 2011 a las 10:23pm

Jeje, la tabla DRIVING es la tabla que conduce la consulta, por ejemplo, si tienes que obtener un reporte de las ventas del ultimo año de los productos que no cuestan mas de 5$, la tabla que conduce seria PRODUCTOS, ya que vamos a filtrar por precio, con lo cual nos quedaríamos con un conjunto restringido, y luego con ese set de resultados buscamos las ventas.

Haber elegido a la tabla ventas como tabla driving en vez de productos, haría que la consulta sea mas costosa.
Espero se haya entendido! Y si no es asi pruebo con ejemplos de sql.

Saludos, Gisela

Comentario de Luis Fernando Molina el octubre 10, 2011 a las 10:30pm

Gisela y en el caso de escoger Ventas por que sería más costoso ? 

No sería parecido ?

Comentario de Gisela Velazco el octubre 10, 2011 a las 11:15pm

No, en el orden inverso se haria un full scan en toda la tabla ventas.

Supongamos que tenemos10.000 ventas, 1000 productos y solo 13 cumplen la condición de costar menos de 5$, las ventas estimadas de cada uno son entre 10 y 20, es decir, que en la tabla ventas, nos encontraríamos con 130 a 260 ventas correspondientes a estos productos.

Si primero accedemos a productos, la búsqueda sobre ventas, podria efectuarse por un indice (indizando por código de producto), accediendo a un 1.3 / 2.6% de la tabla ventas.

Pero si elegimos la tabla ventas como DRIVING, sin contar con la informacion de los productos a buscar, no nos queda mas remedio que acceder al 100% de la tabla.

Alguno se imagino leer todo un libro para buscar un capitulo especifico y conocido sin pasar antes por el indice? Claro esta, que si no tenemos información del capitulo, no nos queda otra que leer el libro completo...

Comentario de Luis Fernando Molina el octubre 10, 2011 a las 11:21pm
Mmmm es que me pareció que también habria full scan de la tabla productos al buscar esos 13 que cumplen :S no me imaginaba la tabla indexada con el precio.
Comentario de Gisela Velazco el octubre 10, 2011 a las 11:24pm

Claro, sobre productos puede hacer full o no, dependiendo de los indices que tenga, el tema clave esta sobre la tabla mas pesada que es ventas.

Cuando tenemos una consulta para mejorar, lo primordial es identificar la tabla driving, y lo podemos hacer conociendo el peso de cada tabla, los indices que tiene, y que condiciones del where achican considerablemente el set de resultados.

Comentario de Luis Fernando Molina el octubre 10, 2011 a las 11:25pm
uffffff peeeeeeeerdon !!! vi que las 2 del ejemplo que pusiste eran de 10k !!! Mala jugada de la vista !  De ahí mi duda ! jajaja
Comentario de Gisela Velazco el octubre 10, 2011 a las 11:35pm

Ah jeje no hay problema Luis, la idea es compartir y generar este tipo de debates.

Saludos!

Comentario de Carlos Miguel Pèrez Chàvez el octubre 10, 2011 a las 11:46pm
Ahh que buen debate....... una pregunta la tabla driving es la tabla en el cual vas a obtener la mayoria de los set de resultados? 

Comentario

¡Tienes que ser miembro de Tips de Performance y Tuning para agregar comentarios!

 

Miembros (164)

 
 
 

© 2017   Creado por Fernando Garcia.   Tecnología de

Insignias  |  Informar un problema  |  Términos de servicio