Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/03/2013, 19:56
reynierpm
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 8 meses
Puntos: 1
Optimizacion de algoritmo o optimizacion de BD?

Hola a todos, me disculpais si la pregunta no pertenece a este Foro pero realmente no sabia si ponerla aca o en el foro de BD. Bueno el tema es el siguiente, tengo tres tablas en mi BD (ver imagen adjunta) llamadas: tbl_blacklist que contiene alrededor de 92 038 registros, tbl_cmdatabase que contiene alrededor de 45 742 registros y por ultimo tbl_ndatabase que contiene 194 074 registros. La tabla principal donde siempre inserto nuevos datos y consulto es la mas grande tbl_ndatabase. La forma de introducir los datos es leerlos de un fichero Excel que tiene una sola columna pero en ocasiones hasta mas de 50 000 filas. De por si leer un fichero Excel desde PHP es una tarea lenta (estoy usando PHPExcel). Para insertar un nuevo dato en la tabla tbl_ndatabase debo comprobar primero que no este en la tabla tbl_blacklist ni en la tabla tbl_cmdatabase. El algoritmo que hice para ello fue:

1. Realizar una consulta a la BD, obtener todos los registros de la tabla tbl_blacklist y ponerlos en un array
2. Realizar una consulta a la BD, obtener todos los registros de la tabla tbl_cmdatabase y ponerlos en un array
3. Hacer un array_merge para que me quede en uno solo
4. Por cada fila que encuentre en el Excel y usando la funcion in_array verifico que el valor no este y asi me da la seguridad de que al menos en esas dos tablas no va a estar.

Esto es super bien lento y no encuentro forma de hacerlo mas sencillo. Que me sugieren? Alguna idea? Debo cambiar el algoritmo o hacer algun tipo de optimizacion en la BD para que se ejecute mas rapido? Estoy realizando pruebas en una VM con CentOS 6.4 y 3GB de RAM no quiero ni ver que sucede si lo subo a mi hosting

Por otro lado y relacionado con este mismo problema, tengo otra situacion y es que debo mostrar para luego generar un fichero Excel los registros desde el 1 hasta el 194 074 avanzando en un valor que me entren en la aplicacion, digamos que entre 1000 entonces lo que estoy haciendo es generar una tabla HTML que comienza en 1 y aumenta de 1000 en 1000 de la siguiente forma:
Código:
1-1000
1001-2000
2001-3000
Y asi sucesivamente pero esto es tambien super lento y a veces demora hasta unos 3 min en generarse la pagina. Cuando le doy generar el Excel y quiero comenzar en 1001 a 2000 demora 10 min cosa que suena bien loco porque cualquier hosting da como maximo 60 seg o algo asi.

Todas las pruebas las hago en local, que me sugieren?
Saludos
__________________
Reynier Perez Mira
Skype: reynierpm
Site: http://www.reynierpm.com