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

Problema con Select en SQL Server de 40 Millones de registros

Estas en el tema de Problema con Select en SQL Server de 40 Millones de registros en el foro de Bases de Datos General en Foros del Web. hola a todos nuevamente... tengo una tabla con mas de 40 millones de registros y al tratar de hacer una busqueda en la misma manda ...
  #1 (permalink)  
Antiguo 21/04/2005, 17:24
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 21 años
Puntos: 5
Problema con Select en SQL Server de 40 Millones de registros

hola a todos nuevamente...
tengo una tabla con mas de 40 millones de registros y al tratar de hacer una busqueda en la misma manda error de timeout expired

esta es la direccion, por favor, alguna idea de lo q tengo que poner en el codigo (ASP) o en el servidor, etc.. cualquier cosa me ayudaria....
estare aqui esperando sus respuestas...

http://sitio11.digitalis.com.pa/

donde dice Enter part number
prueben con cualquier valor numerico, por ejemplo 500....
el selecciona todos los registros que contenga ese numero (like)

Código:
sSQL = "select * from catalogo where part_number like '%" & part_number & "%' order by part_number"
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #2 (permalink)  
Antiguo 21/04/2005, 18:48
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 1 mes
Puntos: 2
Ok.

EL problema es tu busqueda, empezamos por:

sSQL = "select * from catalogo
where part_number like '%"
& part_number & "%'
order by part_number"

Tendras que optimizar tu base de datos y tu consulta.

1. El orderBy no debe ser necesario si tienes un index sobre part_number.

2. select * , cambialo a select campo1, campo2, campo3, etc.

3. part_number like '%" & part_number & "%' ... part_number es una cadena ?... porque no es un numero, un ID, entiendo puede ser el codigo de una pieza, en lo cual, bien.

Rapidamente el codigo debe ser exacto, o por lo menos basarte en un punto de la cadena, algo como:

a) where part_number like '" & part_number & "%'
b) where part_number = part_number

Otra cosa, si tienes esto para una tienda, lo cual es lo mas seguro, entonces debes probar dividir en Departamentos - Familias - Tipos -etc., asi tu tabla tendria un indes general, algo como:

TablaProductos

- ID - Departamento - Familia - Tipo - Part_Number - [Otros campos]

index clustered sobre Departamento - Familia - Tipo - Part_Number

Entonces tu consulta seria:

sSQL = "select * from catalogo
where Departamento = 1
and Familia = 1
and Tipo = 1
and part_number like '%"

De esta manera el compilador busca en el index no renglon por renglon, sino que el sabe que tiene todo ordenado, y si en el renglon 2 k encuentra el departamento 1, entonces ahi comienza a buscar la familia, solo en el pedazo donde Departemento 1 existe, eso hace muy eficiente la consulta, pero como te digo, va desde como diseñas la base de datos.

Suerte!!
  #3 (permalink)  
Antiguo 21/04/2005, 19:01
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 21 años
Puntos: 5
Neuron_376, gracias por responder....
ok, mira... te explico....
lo que sucede que eso son numeros de piezas de electronica y cuando me dieron la BD estaba en formato TXT y pesaba mas de 600mb.... ya te imaginas.... y lo malo es que no importo bien a la hora de hacer la importacion a sql... y la misma tiene solo una columna que es part_number.... ya ves porque no puedo dividirla por categoria???

ya el timeout expired no me sale porque le puse esto a la coneccion:

Código:
set oConn = Server.CreateObject("ADODB.Connection")
oConn.ConnectionTimeout = 0
oConn.CommandTimeout = 0
funciona, pero demora muuuuuuuuuuuuuuchooooooooooo!!!
tengo que encontrar otra solucion
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #4 (permalink)  
Antiguo 22/04/2005, 11:43
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 1 mes
Puntos: 2
Ok.

Pero saber algo, si ya tienes esa base de datos creada, entonces ya puedes trabajar en los detalles de los index y la forma en que consultas como te puse arriba, tambien puedes crear un programa en ASP que te haga un volcado COPIAR esos valores a otra tabla donde ya tengas las catagorias definidas, bueno, tendras que seguir trabajando en eso, el problema como te dicia esta en el diseño de la tabla en general y la consulta que haces com like %valor%, porque es una condicion MUY GENERAL.

Suerte!!
  #5 (permalink)  
Antiguo 22/04/2005, 16:10
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 21 años
Puntos: 5
si, gracias.... ya lo se...
me la trajeron asi mismo y ahora estoy pasando trabajo.... pero no te preocupes.... ayer hablamos con el cliente y el muy cara de nance nos dijo que el ya habia tratado con sql y que era muy pesado
ahora vamos a tratar con otra cosa, pero dejaremos la bd como esta por cualquier cosa...
muchas gracias por todo... te lo agradesco
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
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 09:04.