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.