Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas

martes, 5 de agosto de 2014

Crear un índice con Oracle 11g



Bueno la entrada de hoy vamos a hablar de los índices de una BD. Un índice es una Estructura de Datos que mejora la velocidad en las operaciones de la BD. ¿Y cómo hace esto? , muy sencillo, el índice es un identificador único de cada una de los registros de una tabla de la BD con esto se permite un rápido acceso a ese registro, se suele hacer sobre aquellos campos que se requieren en frecuentes búsquedas.



En Oracle 11g los índices son opcionales, pero son bastante utilizados o casi imprescindibles. El índice está asociado a una tabla mediante una o varias columnas. Con esto como ya comenté antes se logra que las operaciones a la BD, por ejemplo, una consulta devuelva el resultado más rápidamente, con una tabla enorme es muy ventajoso. Las tablas pueden tener más de un índice, además puede haber índices compuestos.




Un cosa que hay que advertir también es que si bien se mejoran las operaciones de consulta (SELECT), empeoran mínimamente las operaciones de borrado y de inserción. (DELETE e INSERT)


A continuación voy a comentar como crear un índice en una tabla con Oracle 11g, se hace de la siguiente manera, sin tener en cuenta las clausulas y los atributos que podría tener:


CREATE [UNIQUE|BITMAP] INDEX [esquema.]nombre_indice
      ON [esquema.]nombre_tabla [alias_tabla]
         (col [ASC | DESC])

Por ejemplo, tenemos la tabla CLIENTE (nombre,apellidos,tlfno,DNI,sexo,edad), en el esquema EmpresaSA. Si en esta tabla queremos crear un índice lo tendríamos que hacer de la siguiente manera:
CREATE INDEX EmpresaSA.cliente_idx1 
 ON EmpresaSA.cliente (DNI);
Si ahora lo que queremos crear es un índice compuesto por apellido y el DNI sería de la siguiente manera:
CREATE INDEX EmpresaSA.cliente_idx2 
 ON EmpresaSA.cliente (apellido,DNI);
Ambos índices los va a crear en el TABLESPACE en que tenga por defecto el usuario que los ha creado.  Espero que con esto os pueda servir de ayuda para la creación sencilla de un índice.

viernes, 22 de marzo de 2013

Optimizar SQL

Cuando realizamos una consulta a una BD para obtener datos hay que ver que dicha consulta está optimizada o lo que es lo mismo, ver si es la mejor manera como la hemos realizado. 

Si no lo hacemos podemos sobrecargar el sistema innecesariamente y que tarde en recuperar los datos de forma escandalosa.

Voy a comentar que podemos hacer para que al realizar una consulta SQL no quede lo mas optimizada posible con las siguientes ayudas:

-Lo primero que hay que tener en cuenta es que las tablas tienen que estar en 3FN con ello evitamos duplicidad de datos y para poder aprovechar al máximo el almacenamiento de los datos.

-Es muy común pensar crear campos para comentarios en una tabla y muchas veces ni los rellenamos, por eso es mejor crear una tabla a parte para los comentarios evitando así desperdiciar espacio.

-Los tamaños de los datos ajustarlos bien, poner los campos que son fijos los primeros de las tablas y los variables los últimos.

-Colocar indices en los atributos que nos sirven como nexos entre varias tablas por ejemplo en las claves de tablas con las que vayamos hacer consultas que requieran JOINs.

-Solo seleccionar los campos que necesitemos para la consulta y no seleccionar todos los campos con el clásico asterisco * .

-Indicar la tabla a la que accedemos cuando usamos varias tablas en una consulta con varios atributos procedentes de distintas tablas, viene bien el uso de alias.

-Es importante hacer que los WHEREs en las consultas los hagamos sobre los campos claves.

-Tener en cuenta el orden de las tablas en la clausula FROM y WHERE ya que si queremos obtener por ejemplo los PEDIDOS de un CLIENTE en el año 2012 es conveniente hacer primero que filtre el año para evitar que recorra todos los pedidos.

Estas son algunas de las cosas que se pueden hacer para que las consultas se realicen de una forma más optima. Aunque en otros artículos repasaré mas formas.