diferencia entre imagenes

11/03/2008 - 10:50 por reo | Informe spam
tengo una tabla con un campo de tipo imagen, llamado foto y quisiera obtener
para dos registros si la imagen ha cambiado

yo utilizo

select a1.codigo

from tabla as a1 with(NOLOCK),tabla as a2 with(NOLOCK)

where
substring(a1.codigo,6,len(a1.codigo))=substring(a2.codigo,6,len(a2.codigo))

and
isnull(convert(varchar(MAX),convert(varbinary(16),a1.foto)),'')<>isnull(convert(varchar(MAX),convert(varbinary(16),a2.foto)),'')

que efectivamente funciona , pero tarda mucho , cuando se trata de muchos
registros



NOTA: los dos registros a comparar coinciden en la parte final, ejemplo

001xxx se ha de comparar con el registro de codigo 002xxx

001yyy se ha de comparar con el registro de codigo 002yyy

etc...


¿existe alguna otra manera de comparar si la imagen es igual o no?

gracias

Preguntas similare

Leer las respuestas

#1 Jesús López
11/03/2008 - 11:28 | Informe spam
Una solución a problema de rendimiento sería guardar un hash de las
imágenes, y en vez de comparar las imágenes comparar los hash.

Saludos:

Jesús López
www.solidq.com


"reo" escribió en el mensaje
news:
tengo una tabla con un campo de tipo imagen, llamado foto y quisiera
obtener para dos registros si la imagen ha cambiado

yo utilizo

select a1.codigo

from tabla as a1 with(NOLOCK),tabla as a2 with(NOLOCK)

where
substring(a1.codigo,6,len(a1.codigo))=substring(a2.codigo,6,len(a2.codigo))

and
isnull(convert(varchar(MAX),convert(varbinary(16),a1.foto)),'')<>isnull(convert(varchar(MAX),convert(varbinary(16),a2.foto)),'')

que efectivamente funciona , pero tarda mucho , cuando se trata de muchos
registros



NOTA: los dos registros a comparar coinciden en la parte final, ejemplo

001xxx se ha de comparar con el registro de codigo 002xxx

001yyy se ha de comparar con el registro de codigo 002yyy

etc...


¿existe alguna otra manera de comparar si la imagen es igual o no?

gracias

Respuesta Responder a este mensaje
#2 reo
11/03/2008 - 13:39 | Informe spam
perdona mi ignorancia, que es un hash y como lo implemento.

muchisimas gracias

"Jesús López" escribió en el
mensaje news:%
Una solución a problema de rendimiento sería guardar un hash de las
imágenes, y en vez de comparar las imágenes comparar los hash.

Saludos:

Jesús López
www.solidq.com


"reo" escribió en el mensaje
news:
tengo una tabla con un campo de tipo imagen, llamado foto y quisiera
obtener para dos registros si la imagen ha cambiado

yo utilizo

select a1.codigo

from tabla as a1 with(NOLOCK),tabla as a2 with(NOLOCK)

where
substring(a1.codigo,6,len(a1.codigo))=substring(a2.codigo,6,len(a2.codigo))

and
isnull(convert(varchar(MAX),convert(varbinary(16),a1.foto)),'')<>isnull(convert(varchar(MAX),convert(varbinary(16),a2.foto)),'')

que efectivamente funciona , pero tarda mucho , cuando se trata de muchos
registros



NOTA: los dos registros a comparar coinciden en la parte final, ejemplo

001xxx se ha de comparar con el registro de codigo 002xxx

001yyy se ha de comparar con el registro de codigo 002yyy

etc...


¿existe alguna otra manera de comparar si la imagen es igual o no?

gracias





Respuesta Responder a este mensaje
#3 Jesús López
11/03/2008 - 17:06 | Informe spam
¿Has oído hablar de Google? Una búsqueda de hash en el Google te da como
primera entrada:

http://en.wikipedia.org/wiki/Hash_function

En SQL Server 2005 tienes dos opciones para generar los hashes, la función
CHECKSUM y la función HashBytes:

http://msdn2.microsoft.com/en-us/li...89788.aspx

http://msdn2.microsoft.com/en-us/li...74415.aspx

De todas maneras yo consideraría la posibilidad de generar los hashes en el
cliente para evitarle a SQL Server esa tarea.

Por otra parte la condición del where:

where
substring(a1.codigo,6,len(a1.codigo))=substring(a2.codigo,6,len(a2.codigo))

Dado que utiliza funciones sobre los campos de las tablas, SQL Server no
podrá utilizar índices para resolver la consulta, lo que la hace
potencialmente ineficiente. Una solución a esto sería crear campos
calculados en las tablas con tales expresiones, indexar los campos
calculados y hacer la comparación en la where con dichos campos calculados.

Saludos:

Jesús López
www.solidq.com






"reo" escribió en el mensaje
news:
perdona mi ignorancia, que es un hash y como lo implemento.

muchisimas gracias

"Jesús López" escribió en el
mensaje news:%
Una solución a problema de rendimiento sería guardar un hash de las
imágenes, y en vez de comparar las imágenes comparar los hash.

Saludos:

Jesús López
www.solidq.com


"reo" escribió en el mensaje
news:
tengo una tabla con un campo de tipo imagen, llamado foto y quisiera
obtener para dos registros si la imagen ha cambiado

yo utilizo

select a1.codigo

from tabla as a1 with(NOLOCK),tabla as a2 with(NOLOCK)

where
substring(a1.codigo,6,len(a1.codigo))=substring(a2.codigo,6,len(a2.codigo))

and
isnull(convert(varchar(MAX),convert(varbinary(16),a1.foto)),'')<>isnull(convert(varchar(MAX),convert(varbinary(16),a2.foto)),'')

que efectivamente funciona , pero tarda mucho , cuando se trata de
muchos registros



NOTA: los dos registros a comparar coinciden en la parte final, ejemplo

001xxx se ha de comparar con el registro de codigo 002xxx

001yyy se ha de comparar con el registro de codigo 002yyy

etc...


¿existe alguna otra manera de comparar si la imagen es igual o no?

gracias









email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida