sábado, 10 de noviembre de 2007

Indices en SQL SERVER - I

Analizemos una situación:
Digamos que tengo una tabla llamada Empleados en donde se guarda la información de 2'000,000 de empleados.
Si yo quisiera recuperar los registros de aquellos empleados cuyo nombre sea Pepe...
estarán de acuerdo conmigo en que para hacer esto necesito necesito ir de fila en fila y verificar si el campo nombre es igual a Pepe. Osea,
SELECT * FROM Empleados WHERE Nombre = 'Pepe'
simple no?
claro, pero cuánto te demoras.
Otro ejemplo (este es el típico ejemplo y que termina convenciéndote):
Si tengo un libro y quiero buscar un tema específico, digamos LA BATALLA DE LAS TERMÓPILAS, cómo hago?

voy de hoja en hoja y busco un título que coincida? no seas malo... nunca acabaría, mas bien vamos derechito al índice buscamos ahí ese título, luego que lo encontramos nos fijamos en qué página dice que se encuentra y fuah!! en un dos por tres llegamos a la página especificada. Perfecto no?
Y, eso se puede hacer en SQL SERVER? exaaaaaaaaaaaaacto, captaste la idea!! yuuuuuuuuju!!
Sí, sí se puede hacer en SQL SERVER.
Y eso mejora la performance de la consulta? pos pa' que te digo que no si sí.

En el ejemplo del libro que te comentaba, se llegaba más rápido al tema buscado gracias a que se contaba con un índice.
En SQL SERVER también hay índices... y te recomiendo muy seriamente que lo tomes en cuenta a la hora de trabajar con tablas que contengan bastantes registros.

Ahora, te explicaré cómo funcionan los índices en SQL SERVER.
Si tenemos una tabla con 10 empleados: pepe, juan, juana, camilo, pedro, pepe, jesus, charles, juan y diana.
Digamos también que los ingresaste en ese orden: primero a pepe, luego a juan, luego a juana y asi sucesivamente.
Si tuvieras que hacer una consulta que busque a todos los empleados que se llamen pepe, harías esto:
SELECT * FROM Empleados WHERE Nombre = 'Pepe'
y el SQL lo primero que haría es preguntar: esa tabla tiene índice? si la respuesta es NO, entonces el SQL diría "pucha, osea que tengo que buscar fila por fila!"... efectivamente, eso tendría que hacer... preguntaría: te llamas pepe? si es así te acumula, si no pasa al siguiente registro, y así... pero si son 2 millones de filas?... imagínate cuánto demora esta consulta.
Ahora, te explicaré por qué mejora la performance de la consulta si le pones índices a la tabla.
Al crearle un índice a una tabla, tú debes especificar a cuál(es) columnas le deseas poner índice, ponerle índice significa darles un orden ascendente o descendente, en función de los caracteres que forman ese campo (en nuestro caso nos referimos al campo Nombre).
Observen el gráfico

En realidad hay dos tipos de índices:
Clusterados, reordenan la tabla de manera física, osea cambian el orden de los registros.
No clusterados, no reordenan los registros de manera física, pero si almacenan una especie de secuencia en otro lugar, de manera que cuando hay una consulta, chequeamos ese índice e igual, accedemos más rápido a los registos que buscamos.

Pero por esta vez no profundicemos más en el tema, mi idea era hablarles sobre los índices SQL SERVER a manera de cuento para que quede más o menos claro y ya desde el próximo post nos ponemos más técnicos en el tema jeje.

1 comentario:

Unknown dijo...

Compadre, muchas gracias, se nota que sabes explicar, maestro.