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

buscar valores repetidos en una tabla

Estas en el tema de buscar valores repetidos en una tabla en el foro de Bases de Datos General en Foros del Web. buen día amigos después de un larguísimo tiempo inactivo me ha tocado volver a mis inicios y reincorporarme ala programación de paginas web bueno mi ...
  #1 (permalink)  
Antiguo 26/08/2008, 12:33
 
Fecha de Ingreso: enero-2004
Mensajes: 39
Antigüedad: 20 años, 10 meses
Puntos: 0
buscar valores repetidos en una tabla

buen día amigos después de un larguísimo tiempo inactivo me ha tocado volver a mis inicios y reincorporarme ala programación de paginas web

bueno mi pregunta que ya se que existe una respuesta pero no es la adecuada para este caso

el entorno del problema es el siguiente

un conjunto de estaciones meteorológicas guardan datos en una computadoras que están en el culo del mundo las cuales de comunican por radio a una central y ademas transmite los datos que recopilo cada día... todo muy bonito asta aquí

la cosa es que no se cuantas estaciones están transmitiendo lo cierto es que cada día se crea un buen volumen de información ademas de los historiales de toda la información recopilada en 8 larguísimos años...

la cosa es que tengo que buscar en los historiales y en los datos nuevos que llegan los valores que se repiten en la tabla que se crea

la cosa es que la tabla que estoy manejando ya tiene 600 mil registros la del historial no se cuantas tiene pero se que pesa al rededor de 2.5gigas

la solución que encontré en el foro funciona pero para tablas cortas

el código usado es el publicado en http://www.forosdelweb.com/f86/consu...stinct-419636/

para los perezosos
es el siguiente

SELECT * FROM zona1 WHERE temp IN (SELECT temp FROM zona1 HAVING COUNT(templ) >1 )

este código esta machete (traducción bien) para buscar los valores que se repiten

siempre y cuando la tabla no sobrepase de algunos miles de registros

mi pregunta no existe alguna manera mas eficiente de buscar esos valores sin tener que esperar a que las ranas echen pelo

datos del sistema en el que estoy trabajando
php 5.2.6
mysql 5.0.51b
y el apache no lo recuerdo

otra cosita no tengo la mas mínima idea de como importar el historial que es un archivo .dbf (ojo pesa al rededor de 2.4 gigas)
  #2 (permalink)  
Antiguo 26/08/2008, 13:31
Avatar de Lord Kazuky  
Fecha de Ingreso: junio-2006
Ubicación: 7F.00.00.01
Mensajes: 123
Antigüedad: 18 años, 5 meses
Puntos: 5
Respuesta: buscar valores repetidos en una tabla

Bueno creo que el principal problema en esa consulta es el Operador IN, ya que por cada registro de zona1 se compara temp con todos los datos de la otra consulta.

Es decir, si la consulta: (SELECT temp FROM zona1 HAVING COUNT(templ) >1 ) te devuelve 500.000 registros. y 'zona1' tiene 1.000.000 de registros, se esta comparando cada uno de esos '1.000.000' contra los otros '500.000' unas '500.000' veces...

(Creo que es asi) En cualquier caso es una consulta pesada.

Lo que se puede hacer tratar el resultado de la consulta como una tabla más:


SELECT A.* FROM zona1 AS A,
(
SELECT t1.temp FROM(
SELECT temp, count(temp) AS numero FROM zona1 GROUP BY temp
) AS t1
WHERE t1.numero > 1

) AS t2
WHERE A.temp = t2.temp

La parte en negrita es la que busca los 'temp' con un numero de registros mayor a 1

Yo hice la prueba con tablas de mas o menos 400.000 registros. Haber si esta te funciona mejor.

Eso si, verifica que que el campo 'temp' sea un indice en la tabla.

Tambien en vez de traer todos los registros de zona (A.*), solo traes los que necesitas.

Lo otro es configurar el servidor MySQL para que utilice más memoria (si te puedes dar ese lujo)
__________________
Saludos.
"Cualquier tonto puede escribir código que un computador entiende. Los buenos programadores escriben código que los humanos pueden entender. ;)"
  #3 (permalink)  
Antiguo 26/08/2008, 13:55
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 9 meses
Puntos: 13
Respuesta: buscar valores repetidos en una tabla

Buena respuesta Lord, solo un apunte, creo que es standar, puedes utilizar el having sin tener que hacer otra subconsulta,
Código:
SELECT 	A.* 
FROM 	zona1 AS A
	JOIN (
		SELECT t1.temp 
		FROM zona1 
		GROUP BY temp
		HAVING count(*) > 1
	) AS t2 	ON A.temp = t2.temp
Salu2
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 14:14.