Piensa en conjuntos de datos, no en filas individuales.

Desde hace tiempo venimos escuchando que los cursores tienen un rendimiento pésimo en SQL Server, y cosas por el estilo. Todo eso es totalmente cierto. Incluso hay una mítica brigada anti-cursores, cuyo comandante jefe es el amigo Miguel Egea. Su lema es "Salva a SQL, mata un cursor" 🙂

También hay un falso rumor por ahí extendido, y es que en Oracle y otros gestores de bases de datos relacionales si que se obtiene un rendimiento óptimo con su uso. Con respecto a esto quiero aclarar que, si bien es cierto que no llegan a afectar tanto al rendimiento del servidor como en SQL Server, si no los utilizamos podremos mejorar el rendimiento. Ahora el problema principal es que su uso nos facilita enormemente nuestro trabajo, así que optamos por usarlos, ya que hacen más sencillo nuestro trabajo. El que esté muy extendido su uso no justifica que tengan un buen rendimiento.

Por qué tienen tan pésimo rendimiento los cursores ? pues precisamente, porque están orientados al procesamiento fila a fila, no al procesamiento de conjuntos de filas, y las bases de datos relacionales están orientadas a conjuntos por definición. Entonces si eliminamos un cursor, mejoraremos el rendimiento ? Pues depende, no siempre la respuesta es si. Mejoraremos el rendimiento si optamos por una alternativa que sea orientada a conjuntos y no a filas. Por ejemplo, en un caso  en el que eliminemos un cursor, pero sigamos pensando en filas y montemos un bucle WHILE en el que vayamos haciendo SELECT de filas individuales y por cada una de ellas realizando las operaciones que necesitemos, poco o nada estamos haciendo, el rendimiento será prácticamente el mismo (no sabría decir cual de ellos tiene mejor rendimiento). Pero si por el contrario logramos sustituir el cursor por instrucciones orientadas a conjuntos que consigan el resultado que necesitamos (cosa posible en la mayoría de los casos) casi con total seguridad estaremos mejorando bastante el rendimiento.

Esto tampoco quiere decir que nunca utilicemos un cursor, los cursores están ahí y nos dan una funcionalidad importante, lo que debemos hacer es evitar su uso innecesario, aunque tengamos que pensar un poco más en cómo resolver la situación. Evidentemente, habrá casos en los que no encontremos otra solución, en esos los utilizaremos, que no pasa nada, lo que debemos evitar es abusar de ellos por comodidad.

A donde quiero llegar ? pues a haceros una recomendación muy importante para todos aquellos que utilizáis SQL Server, y es que, si aún no lo habéis hecho, comencéis cuanto antes a "cambiar el chip", y penséis en conjuntos, nunca en filas individuales.

Pd. Por cierto, y también estoy en la brigada anti-cursores 😛

Saludos
Salva
www.helpdna.net

Un comentario en “Piensa en conjuntos de datos, no en filas individuales.”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *