lunes, 15 de abril de 2013

tipos de indices e indices en la base de datos


ÍNDICE BASE DE DATOS
El índice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones, permitiendo un rápido acceso a los registros de una tabla en una base de datos. Al aumentar drásticamente la velocidad de acceso, se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes búsquedas.
El índice tiene un funcionamiento similar al índice de un libro, guardando parejas de elementos: el elemento que se desea indexar y su posición en la base de datos. Para buscar un elemento que esté indexado, sólo hay que buscar en el índice dicho elemento para, una vez encontrado, devolver el registro que se encuentre en la posición marcada por el índice.

ARCHIVO ÍNDICE
Un índice de acceso es un archivo auxiliar utilizado internamente por el SGDB para acceder directamente a cada registro del archivo de datos. La operación de indexación, creada por el SGDB, ordena a los registros de un archivo de datos de acuerdo con los campos utilizados como llave primaria e, incrementa sensiblemente la velocidad de ejecución de algunas operaciones sobre el archivo de datos. Normalmente para cada archivo de datos debe existir un índice cuya llave de indexación sea idéntica a su llave primaria. Este índice es llamado índice primario.
TIPOS DE ARCHIVO
Los archivos pueden clasificarse en cuatro tipos básicos; que son: los archivos maestros, los archivos de transacciones, los archivos de control y los archivos de planeamiento. Esta clasificación dependerá de la relación lógica que tengan que tener los datos, para dar apoyo a la actividad de la organización.
ARCHIVO MAESTRO
Un archivo maestro es un conjunto de registros que se refieren a algún aspecto importante de las actividades de una organización, como por ejemplo el archivo de VENDEDORES. Un archivo maestro también puede reflejar la historia de los eventos que afectan a una entidad determinada, como es en el caso de un archivo HISTÓRICO DE VENTAS. Otros ejemplos son los archivos maestros de: PLAN DE CUENTAS; BANCOS, NÓMINA DEL PERSONAL, CLIENTES, VENDEDORES, PRODUCTOS, PROVEEDORES, COMPETIDORES.
ARCHIVO DE TRANSACCIONES.
Un archivo de transacciones es un archivo temporal que persigue básicamente dos propósitos; uno es el de acumular datos de eventos en el momento que ocurran, y el segundo propósito es el de actualizar los archivos maestros para reflejar los resultados de las transacciones actuales. En otras palabras, guardan información sobre los eventos que afectan a la organización y sobre los cuales se calculan datos; como es en el caso de los archivos de VENTAS, ORDENES DE PRODUCCIÓN o PAGO DE SALARIOS. Otros ejemplos de archivos de transacciones son los archivos de: REGISTROS CONTABLES, COSTOS, FACTURAS, PAGOS A RECIBIR, PROCESOS DE EXPORTACIÓN, CONSULTA DE CLIENTES, PEDIDOS DE CLIENTES Y PEDIDOS A PROVEEDORES.

ARCHIVOS DE CONTROL.
Los archivos de control contienen datos de los archivos maestros y de transacciones, para permitir el análisis del desempeño de la organización. Estos archivosgeneran medidas de control de los negocios, como ser el VOLUMEN DE VENTA POR PRODUCTO, VOLUMEN DE VENTA POR VENDEDOR, VOLUMEN DE VENTA POR CLIENTE, COMPRAS POR PROVEEDOR, COSTO DE REPOSICIÓN.
ARCHIVO DE PLANEAMIENTO.
Los archivos de planeamiento, contienen datos referentes a los niveles esperados de los datos existentes en los archivos maestros y de transacciones; como por ejemplo: PROGRAMA DE VENTAS, PROGRAMA DE COMPRAS, PROGRAMA DE PRODUCCIÓN; PRESUPUESTO FINANCIERO. Por lo tanto los datos existentes en un archivo de planeamiento provienen de los archivos maestros, de transacciones, y de control.

Creando índices en MySQL

Usando el ejemplo inicial, para que la consulta anterior se ejecutase más rápido en nuestro sistema gestor de base de datos, nos vendría bien crear un índice por apellido. Para crear ese índice podemos utilizar una sentencia en lenguaje SQL como la siguiente:
ALTER TABLE personas ADD INDEX (apellido)
De esta forma sencilla indicamos a MySQL que genere una lista ordenada de todos los apellidos de la tabla personas, así como en el ejemplo del libro tenemos los números de teléfono ordenados por el apellido


CREAR INDICES EN ORACLE

En oracle existen tres tipos de indices:
1)Table Index:
CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name
      ON [esquema.]table_name [tbl_alias]
         (col [ASC | DESC]) index_clause index_attribs
2)Bitmap Join Index:
CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name
      ON [esquema.]table_name [tbl_alias]
         (col_expression [ASC | DESC])
            FROM [esquema.]table_name [tbl_alias]
               WHERE condition [index_clause] index_attribs
3)Cluster Index:
CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name
      ON CLUSTER [esquema.]cluster_name index_attribs  
las index_clauses posibles son:
LOCAL STORE IN (tablespace)

LOCAL STORE IN (tablespace)
  (PARTITION [partition
       [LOGGING|NOLOGGING]
       [TABLESPACE {tablespace|DEFAULT}]
       [PCTFREE int]
       [PCTUSED int]
       [INITRANS int]
       [MAXTRANS int]
       [STORAGE storage_clause]
       [STORE IN {tablespace_name|DEFAULT]
       [SUBPARTITION [subpartition [TABLESPACE tablespace]]]])

LOCAL (PARTITION [partition
       [LOGGING|NOLOGGING]
       [TABLESPACE {tablespace|DEFAULT}]
       [PCTFREE int]
       [PCTUSED int]
       [INITRANS int]
       [MAXTRANS int]
       [STORAGE storage_clause]
       [STORE IN {tablespace_name|DEFAULT]
       [SUBPARTITION [subpartition [TABLESPACE tablespace]]]])

GLOBAL PARTITION BY RANGE (col_list)
   ( PARTITION partition VALUES LESS THAN (value_list)
       [LOGGING|NOLOGGING]
       [TABLESPACE {tablespace|DEFAULT}]
       [PCTFREE int]
       [PCTUSED int]
       [INITRANS int]
       [MAXTRANS int]
       [STORAGE storage_clause] )

INDEXTYPE IS indextype [PARALLEL int|NOPARALLEL] [PARAMETERS ('ODCI_Params')]
 {Esto es solo para table index, no para bitmap join Index}
Indices base de datos veterinaria
Microsoft Windows [Version 6.0.6002]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.

C:\Users\familia leyva>cd..
C:\Users>cd..
C:\>cd..
C:\>cd xampp
C:\xampp>cd mysql
C:\xampp\mysql>cd bin
C:\xampp\mysql\bin>mysql -hlocalhost -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.16 MySQL Community Server (GPL)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use veterinaria
Database changed
mysql> create index mascota on customer(name (15));
ERROR 1146 (42S02): Table 'veterinaria.customer' doesn't exist
mysql> create table datos_perro(id varchar(15),nombre varchar(30),sexo varchar(1
0),fecha_nacimiento varchar(15));
ERROR 1050 (42S01): Table 'datos_perro' already exists
mysql> create table datos_mascota(id varchar(15),nombre varchar(30),sexo varchar
(10),fecha_nacimiento varchar(15));
Query OK, 0 rows affected (0.14 sec)

mysql> create table datos_propietario(id varchar(15),nombre varchar(30),telefono
 varchar(10),direccion varchar(15));
ERROR 1050 (42S01): Table 'datos_propietario' already exists
mysql> create table datos_dueno(id varchar(15),nombre varchar(30),telefono varch
ar(10),direccion varchar(15));
Query OK, 0 rows affected (0.14 sec)

mysql> create index datos_mascotas on customer (id(10));
ERROR 1146 (42S02): Table 'veterinaria.customer' doesn't exist
mysql> create index index_mascota  (id(10));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '(id(1
0))' at line 1
mysql> create index index_mascota ON datos_mascota( id (10));
Query OK, 0 rows affected (0.40 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> create index index_mascota ON datos_mascota( nombre (10));
ERROR 1061 (42000): Duplicate key name 'index_mascota'
mysql> create index index_nombre ON datos_mascota( nombre (10));
Query OK, 0 rows affected (0.25 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> create index index_sex ON datos_mascota( sexo (10));
Query OK, 0 rows affected (0.27 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> create index index_id ON datos_dueno( id (10));
Query OK, 0 rows affected (0.25 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> create index index_nomb ON datos_dueno( nombre (10));
Query OK, 0 rows affected (0.26 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> create index index_tele ON datos_dueno( telefono (10));
Query OK, 0 rows affected (0.22 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show tables;
+-------------------------+
| Tables_in_veterinaria   |
+-------------------------+
| analisis_sistema        |
| constantes_fisiologicas |
| datos_dueno             |
| datos_mascota           |
| datos_medio             |
| datos_perro             |
| datos_propietario       |
| sistema_cardiovascular  |
| sistema_musculoso       |
| sistema_nervioso        |
| sistema_respiratorio    |
+-------------------------+
11 rows in set (0.01 sec)

mysql>

No hay comentarios:

Publicar un comentario