miércoles, 23 de marzo de 2016

Libro - SQL Server Execution Plans, 2nd Edition

En muchas ocasiones, tanto en la vida real como en la 2.0, me hacen una pregunta recurrente: ¿Por qué algunas consultas que ejecuto en la base de datos son tan lentas? También, me preguntan cosas como ¿Por qué las consultas son tan lentas sin tengo varios campos indexados?

Siempre respondo que el desempeño de una consulta depende de varios factores como la cantidad de registros que deben filtrarse, la forma en la que está hecha la consulta e incluso el uso de estadísticas en la ejecución de ésta. Particularmente, cuando menciono la palabra “estadísticas” no me creen y debo explicar someramente algunos detalles del optimizador de consultas que sorprendentemente, no conocen.

Una de las responsabilidades de los programadores es garantizar que las bases de datos funcionen eficientemente. Esto implica no sólo un buen diseño de éstas sino también escribir consultas que se ejecuten en un tiempo razonable. Por supuesto, una vez que la base de datos se encuentra en producción es importante hacer un seguimiento a los planes de ejecución, memoria e índices utilizados por el servidor y otros elementos que nos indicarán los cambios necesarios para que las consultas funcionen de mejor manera.

Revisando en Internet me encontré con un libro electrónico denominado “SQL Server Execution Plans, 2nd Edition”, un libro escrito por  Grant Fritchey y que aborda, de manera bien explícita y académica los elementos involucrados en la ejecución de una consulta. Estuve revisando el texto y éste puede ser usado como una excelente referencia para la comprensión y seguimiento de planes de ejecución de SQL Server.

Grant Fritchey es un SQL Server MVP con más de 20 años de experiencia en tecnología de información y es usuario del gestor desde 1995. El autor ha escrito libros para Apress y Simple-Talk y puede ser seguido en su cuenta de Twitter @GFritchey.

Contenido del libro:

Capítulo 1: Execution Plan Basics
Capítulo 2: Graphical Execution Plans for Basic Queries
Capítulo 3: Text and XML Execution Plans for Basic Queries
Capítulo 4: Understanding More Complex Query Plans
Capítulo 5: Controlling Execution Plans with Hints
Capítulo 6: Cursor Operations
Capítulo 7: Special Datatypes and Execution Plans
Capítulo 8: Advanced Topics

El libro puede ser descargado desde aquí.



miércoles, 2 de marzo de 2016

La lógica y el lenguaje (tercera parte/fin)

El castellano -formalmente hablando- no cumple con las reglas lógicas que expliqué en mis anteriores publicaciones. Esto no significa que lo que usted dice está malo sino que la lengua tiene “reglas adicionales” que le dan sentido y consistencia.

Veamos la siguiente frase: “No había nadie”. Aplicando estrictamente las reglas lógicas, observamos que “nadie” implica "ausencia de personas", así que si no hay ausencia de personas entonces hay al menos una persona. Esto contradice nuestra premisa original “No había nadie”.

Otro ejemplo puede ser “No tengo ninguno”. Ninguno implica “ausencia de” o “vacío” así que aplicando la misma lógica, al decir “No tengo ninguno” en realidad estaríamos diciendo “Tengo al menos uno”. Para cerrar (y de nuevo, aplicando la lógica formal) lo correcto sería decir “No tengo al menos uno” lo que evidentemente es más complejo y además, chocante.

La Real Academia salva este escollo explicando lo siguiente: “En español existe un esquema particular de negación, que permite combinar el adverbio 'no' con la presencia de otros elementos que tienen también sentido negativo” y expone como ejemplos las siguientes expresiones: “No está de acuerdo tampoco”, “no lo haré jamás”, ”no lo sabe nadie”, etc. Finalmente la Real Academia indica que “(…) La concurrencia de esas dos «negaciones» no anula el sentido negativo del enunciado, sino que lo refuerza”. Esto indica que en el castellano usted puede usar la doble negación en una frase y ésta no pierde sentido.

Otras maneras de escribir las frases anteriores manteniendo su significado son las siguientes: “Tampoco está de acuerdo”, “jamás lo haré”, ”nadie lo sabe”. Esto es posible ya que los adverbios de negación (Tampoco, nunca, jamás, ninguno, etc.) anteceden al verbo, por lo que no es válido realizar doble negación.

Puede consultar la regla completa en este enlace.

Gracias por leer.

La lógica y el lenguaje (segunda parte)

En la entrega anterior traté las premisas y sus negaciones.

En lógica la negación contradice una afirmación. En ocasiones una premisa es “negada dos veces” dando esto como resultado la premisa original.

Veamos unos ejemplos:
  1. Premisa: “La casa está vacía”
  2. Negación: “La casa no está vacía”. Al no estar la casa vacía, esto implica que la casa tiene al menos una persona adentro. Puede haber una, dos, tres o más personas en la casa pero con haber una persona es suficiente para que la casa no esté vacía.
  3. Negación doble: "Es mentira que la casa no está vacía". Ordenemos esta oración de la siguiente manera: “No es verdad que la casa no está vacía”. Entonces para que la premisa “La casa no está vacía” sea falsa, la casa debe estar vacía por lo que estamos de nuevo en la premisa original “La casa está vacía”.


En conclusión, a negar dos veces una premisa nos encontramos con la premisa original.
Veamos otros ejemplos:

  1. “Es mentira que yo no consumo espárragos”, equivale a decir “Consumo espárragos”.
  2. No es verdad que no tengo perros”, equivale a decir “Tengo perros”.

Muchas veces he escuchado expresiones como ésta:

“Yo tampoco no puedo ir a la fiesta” Si observamos con detalle, estamos negando dos veces por lo tanto la persona sí puede ir a la fiesta. Esto lo podemos aclarar preguntando si la persona va o no va al evento, pero por contexto entendemos que la persona no irá a la fiesta, sin importar la “secuencia lógica de la oración”.

Próxima entrega: La doble negación que refuerza una oración en el castellano.