Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Me sobrecarga el server

Estas en el tema de Me sobrecarga el server en el foro de Bases de Datos General en Foros del Web. Hola a todos. Tengo una programacion para generar aleatoriamente 10 nombres + 10 apellidos. Hasta ayer todo iba bien, y tenia 2200 nombres y 400 ...
  #1 (permalink)  
Antiguo 15/01/2009, 13:31
 
Fecha de Ingreso: noviembre-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
Me sobrecarga el server

Hola a todos.

Tengo una programacion para generar aleatoriamente 10 nombres + 10 apellidos.

Hasta ayer todo iba bien, y tenia 2200 nombres y 400 apellidos, pero se me dio por añadir mas apellidos, y ahora son 1900.

El problema es q el server se queda colgado y no da cargado.

Los nombres estan en al tabla "nombres" y los apellidos en la tabla "apellidos" y para q me de 10 nombres + apellido estoy usando la siguiente orden:

SELECT * FROM nombres,apellidos ORDER BY RAND() LIMIT 0, 10

Por lo que he visto, me genera 4,3 millones de consultas y luego escoje una de las combinaciones.

Cual seria la mejor forma de generar un nombre aleatorio de los 2200 y un apellido de los 1900 sin que me sobrecargue tanto el server?

Gracias por la ayuda.
  #2 (permalink)  
Antiguo 15/01/2009, 13:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Me sobrecarga el server

Tema trasladado a Bases de Datos.
  #3 (permalink)  
Antiguo 16/01/2009, 05:35
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años, 1 mes
Puntos: 85
Respuesta: Me sobrecarga el server

Dejando de lado el modelo de datos (no creo que sea lo mejor), lo que puedes hacer es:

1. Agregar un id numerico a la tabla nombres y a la tabla apellidos, de manera que queden

nombres (id number, nombre varchar)
apellidos (id number, apellido varchar)

2. Crear un indice unique sobre los campos id's de las dos tablas.
3. Crear dos numeros random, uno para el nombre y otro para el apellido.
4. Utilizar la consulta

select nombres.nombre, apellidos.apellido
from nombres, apellidos
where nombres.id = numero_random_1
and apellidos.id = numero_random_2

Esta consulta siempre entra por los indices, asi que no te afecta la cantidad de registros de las tablas.

Nota1, En caso que quieras 10 regitros, debes crear 10 numeros random y utiliar la condición nombre.id in (n1,n2,...,n10)
Nota2, El numero random debe ser menor que el numero maximo de los id's, asi te aseguras que siempre encuentre un registro.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:06.