UASD/ 2013-1/ INF-424/ NOMBRE Adrian Manuel APELLIDO Cordero 1 0 LAB 06-2 MATRICULA 0 3 9 3 3 5 6 SECCIÓN Sábados TEMA 06: Integridad de Data (Constraints –Restricciones-) Tiempo disponible: 60 mins. 6.2.1 La Dirección General de Impuestos Internos (DGII) pone a disposición del público en general, un archivo de texto (*.TXT) con la base de datos de todos los Registros Nacionales de Contribuyentes (RNCs) del país. En este laboratorio usted trabajará con ese archivo de texto e importará estos datos a una tabla MySQL y comprobara las ventajas de utilizar índices al realizar consultas de bases de datos. Requerimientos 6.2.2 Ir a la página de la DGII y bajar la base de datos de RNCs: a. Ir al URL https://www.dgii.gov.do/app/WebApps/ConsultasWeb/consultas/rnc.aspx b. Bajar la base de datos de RNCs haciendo click en “Listado de todos los RNCs” c. Una vez bajado el archivo DGII_RNC.zip, descomprímalo para obtener un archivo llamado DGII_RNC.txt 6.2.3 Importando datos en MySQL a partir de un archivo de texto En este paso, se importara el archivo DGII_RNC.txt bajado en el punto anterior hacia el esquema inf424db. Mysql soporta muchas formas por las cuales se puede importar el contenido de un archivo de texto hacia tabla(s) de un esquema. Entre ellas podemos encontrar: La sentencia sql LOAD DATA INFILE. Ver secciones 3.3.3 y 13.2.6 del manual de mysql. El utilitario mysqlimport. Es un cliente que suministra una interfaz de linea de commandos para la sentencia sql LOAD DATA INFILE. Ver sección 4.5.5 del manual de mysql. Para nuestro ejercicio, estaremos trabajando con el utilitario mysqlimport. 6.2.3.1 Crear la tabla llamada DGII_RNC, donde se depositaran los datos. CREATE TABLE DGII_RNC (campo1 varchar(200) , campo2 varchar(200) , campo3 varchar(200) , campo4 varchar(200) , campo5 varchar(200) , campo6 varchar(200) , campo7 varchar(200) , campo8 varchar(200) , campo9 varchar(200) , campo10 varchar(200) , campo11 varchar(200) ); Laboratorio 6-2 del tema Integridad de Data, Profesores Víctor Calcaño y Julio Castro, Página 1 of 3 6.2.3.2 Importar el archivo de texto usando la herramienta mysqlimport: C:\TMP>mysqlimport -d --fields-terminated-by="|" -u root -p --local inf424db DGII_RNC.TXT Enter password: ***** Los resultados de este comando deben parecerse a estos: inf424db.DGII_RNC: Records: 2347779 Deleted: 0 Skipped: 0 Warnings: 410659 6.2.3.3 Abrir Mysql Workbench y verificar que la tabla DGII_RNC está poblada. Verifique cuantos registros tiene y si estos coinciden con la cantidad de registros cargados por la herramienta mysqlimport. 6.2.4 Comprobando eficiencia de las consultas (queries) al hacer búsquedas con índices a) Usando la herramienta Mysql Workbench, realice la siguiente consulta a la tabla DGII_RNC del esquema inf424db: select * from dgii_rnc WHERE CAMPO1='101009918' Escriba la duración de la consulta, que está dada en la ventana ‘Output’ de Mysql Workbench, en la columna ‘Duration/Fetch’. Nota: al autor de este ejercicio este ejercicio, la ejecución de esta consulta duró 6.094 segundos. 9.086 segundos b) Cree un índice llamado IDX_CAMPO1 haciendo referencia al campo de la tabla DGII_RNC llamado ‘CAMPO1’ para que la búsqueda por este campo sea más efectiva. Escriba la sentencia CREATE INDEX utilizada. CREATE INDEX DX_CAMPO1 ON DGII_RNC(CAMPO1]); c) ¿Cuánto tiempo le tomó al motor del DBMS MySQL, el crear el índice IDX_CAMPO1? 3.02 segundos d) Usando la herramienta Mysql Workbench, realice nuevamente la siguiente consulta a la tabla DGII_RNC del esquema inf424db, luego de crear el índice: select * from dgii_rnc WHERE CAMPO1='101009918'; Escriba la duración de la consulta, que está dada en la ventana ‘Output’ de Mysql Workbench, en la columna ‘Duration/Fetch’. Nota: Al autor de este ejercicio este ejercicio, luego de crear el índice IDX_CAMPO1, la ejecución de esta consulta duró 0.031 segundos. 0.0004 segundos Laboratorio 6-2 del tema Integridad de Data, Profesores Víctor Calcaño y Julio Castro, Página 2 of 3 e) Escriba el tiempo que ahorró esta consulta, luego de crear el índice IDX_CAMPO1. Para esto, escriba la duración de la consulta antes de crear el índice y réstelo al valor de la duración de la consulta luego de crear el índice. 6.066 segundos f) Escriba el tiempo aproximado de respuesta al usuario que se ahorraría en 1) 500 consultas similares a la anterior, 2)10,000 consultas similares a la anterior, 3)500,000 búsquedas similares a la anterior: En 500 consultas ahorro 6.066 * 500=3,033minutos En 10,000 consultas ahorro 6.066 * 10,000 =60,660 minutos En 500,000 consultas ahorro 6.066* 500,000=3,033,000 minutos Laboratorio 6-2 del tema Integridad de Data, Profesores Víctor Calcaño y Julio Castro, Página 3 of 3