Monthly Archives: January 2009

Que significa sargeable en SQL

Al estar leyendo foros de SQL sobre maneras de optimizar queries, me tope con una sugerencia de un DBA experto en la cual le sugeria a otro DBA el hacer que su query fuera sargeable. Nunca antes habia escuchado el termino, y al parecer no es tan conocido.

Despues de leer un poco sobre el termino, me di cuenta que deberia ser conocimiento basico de SQL para cualquier desarrollador.

Que la clausula de WHERe de un Query de SQL sea Sargeable significa que contenga una constante contra la cual comparar directamente el valor del campo de una tabla y el beneficio de que sea sargeable es que el Engine de SQL pueda utilizar cualquier index que exista sobre el campo, que resulta en un index seek en lugar de un table scan (que es más costoso en performance).

Para que este un poco mas claro: Un index esta creado únicamente sobre el VALOR del campo. Si nuestra clausula de WHERE encierra el campo indexado en una funcion (como por ejemplo SUBSTRING o CONVERT), cualquier posibilidad de usar el index esta eliminada, porque el Engine de SQL debe procesar cada row a traves de la funcion para determinar si cumple o no la constante contra la cual se esta comparando.

Un ejemplo muy sencillo seria el siguiente:

WHERE SUBSTRING(Apellido, 1, 4,) = 'Rodr'

La clausula de arriba no es Sargeable, porque el hecho de que exista un SUBSTRING contra nuestro campo, obliga al Engine a procesar cada campo.

En cambio, la clausula de abajo utiliza directamente el campo y se compara contra una constante, por lo cual se puede utilizar el index de nuestro campo.

WHERE Apellido LIKE 'Rodr%'

Otro ejemplo, que normalmente engañaría a varios de nosotros, seria un query para sacar todos los registros insertados en una tabla el dia de hoy, basándonos en el campo FechaHoraInsercion, que tiene tanto la Fecha como la Hora en que fue insertado el registro.

Una de las maneras mas comunes de hacer este query es el parsear el valor de FechaHoraInsercion y hacer la comparacion en una sola clausula, como por ejemplo:


SELECT NumeroCliente, Nombre, Apellido
FROM Clientes
WHERE
CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, FechaHoraInsercion))) = CONVERT(DATETIME, FLOOR(CONVERT(FLOAT,getDate())))

A pesar de que existe un índice sobre el campo FechaHoraInsercion, de nuevo, no podría ser usado porque el valor del campo en los indices es constante, y aquí tiene que ser pasado por 2 funciones CONVERT y una FLOOR.

La manera mas óptima de hacer este query (y que fuera sargeable) seria:

SELECT NumeroCliente, Nombre, Apellido
FROM Clientes
WHERE
FechaHoraInsercion >= DateAdd(Day, DateDiff(Day, 0, GetDate()), 0)
AND FechaHoraInsercion < DateAdd(Day, DateDiff(Day, 0, GetDate()), 1) [/sourcecode] A pesar de tener 2 clausulas de WHERE en lugar de solo 1, el hecho de que el engine pueda calcular el valor de la constante del lado derecho de la expresion  y simplemente compararlo contra los valores almacenados en el index de FechaHoraInsercion ya resulta en una búsqueda mas óptima. Espero que les sirva.

El layout perfecto de 3 columnas en CSS

Este es un post rápido… estoy por rediseñar un sitio web que utiliza frames, una sola imagen como menú de navegación (image map) y prácticamente que va en contra de cualquier buen principio de diseño web.

Normalmente me gusta crear el layout completamente desde cero, usando solamente codigo mío, pero como no tengo tanto tiempo disponible, tuve que recurrir a utilizar un layout ya hecho. Probablemente tengo más de 300 páginas agregadas como bookmark referentes a CSS, así que fue difícil encontrar el layout que necesitaba.

Al layout que necesito se le conoce como el Holy Grail de CSS….es uno de los layouts más usados, pero que tienen alto nivel de complejidad para lograr diseñarlo sin errores y que sea vea bien en todos los navegadores.

Agradezco a Matthew James Taylor por haberse tomado tiempo de no solamente crear el layout perfecto de 3 columnas en CSS, sino por detallar muy bien el codigo fuente y compartirlo con el mundo.

Ligas a todos los SDK de Microsoft en una sola pagina

Microsoft Logo

Microsoft Logo

Microsoft por fin unificó las ligas a los diferentes (más de 40) Software Development Kits (SDKs) que provee a los desarrolladores que deseen bajarlos.

Antes, había que buscar en el sitio de descargas de Microsoft. Ahora, podemos visitar una sola página y escoger el SDK que queremos bajar.

Ésta es la liga a todos los SDK de Microsoft

1 2 3  Scroll to top