Busqueda por muchos campos

07/04/2005 - 15:38 por Luis Fernando Bedoya | Informe spam
Tengo una tabla con mas de 2 millones de registros , a la cual le quiero
hacer un select por varios conceptos

ejem

fecha,documento,cedula,articulo,cliente

estoy haciendo un form de consulta de transacciones, donde se puede hacer
por uno de los campos o varios o mezcla de ellos.

ejem

por fecha
por cedula, fecha
por cliente,documento,articulo

etc

cual seria la forma mas eficiente de establecer los indices de esa tabla,
para que al hacer el select , el sistema tenga que generar el minimo indice
temporal. y hacer mas rapida la consulta.

Gracias por sus sugerencias.

Preguntas similare

Leer las respuestas

#1 Luis María Guayán
07/04/2005 - 16:00 | Informe spam
Si vas a trabajar con sentencias SELECTs para hacer tus busquedas, deberias
tener solo un índice por campo:
fecha,documento,cedula,articulo,cliente

Luego en cada SELECT haces la combinación de campos que necesites.

Ej:
1. por cedula, fecha
SELECT * FROM MiTabla ;
WHERE Cedula = lcCedula AND Fecha = ldFecha

2. cliente,documento,articulo
SELECT * FROM MiTabla ;
WHERE Cliente = lcCliente AND ;
Documento = lcDocumento AND ;
Articulo = lcArticulo


Luis María Guayán
Tucumán, Argentina
________________________________
SysOp de www.PortalFox.com
Microsoft Visual FoxPro MVP
________________________________
La palabra imposible solo figura
en el diccionario de los tontos

"Luis Fernando Bedoya" escribió en el mensaje
news:
Tengo una tabla con mas de 2 millones de registros , a la cual le quiero
hacer un select por varios conceptos

ejem

fecha,documento,cedula,articulo,cliente

estoy haciendo un form de consulta de transacciones, donde se puede hacer
por uno de los campos o varios o mezcla de ellos.

ejem

por fecha
por cedula, fecha
por cliente,documento,articulo

etc

cual seria la forma mas eficiente de establecer los indices de esa tabla,
para que al hacer el select , el sistema tenga que generar el minimo


indice
temporal. y hacer mas rapida la consulta.

Gracias por sus sugerencias.





Respuesta Responder a este mensaje
#2 Luis Fernando Bedoya
07/04/2005 - 18:26 | Informe spam
Gracias Luis María

Una pregunta ,, las velocidades aumentan,

Como estoy emigrando mi aplicacion a cliente servidor
usualemnte usaba indexseek para ver si un registro ya existe ,
ejemplo

indexseek( tipodoc+numerodoc)
ahora con tu sugerencia, tengo dos indices uno para tipodoc y otro para
numerodoc

como me recomiendas que haga esta busqueda

con un select y ver si trae registros??? o ahi otra forma
Gracias por tu colaboracion


"Luis María Guayán" escribió en el mensaje
news:
Si vas a trabajar con sentencias SELECTs para hacer tus busquedas,
deberias
tener solo un índice por campo:
fecha,documento,cedula,articulo,cliente

Luego en cada SELECT haces la combinación de campos que necesites.

Ej:
1. por cedula, fecha
SELECT * FROM MiTabla ;
WHERE Cedula = lcCedula AND Fecha = ldFecha

2. cliente,documento,articulo
SELECT * FROM MiTabla ;
WHERE Cliente = lcCliente AND ;
Documento = lcDocumento AND ;
Articulo = lcArticulo


Luis María Guayán
Tucumán, Argentina
________________________________
SysOp de www.PortalFox.com
Microsoft Visual FoxPro MVP
________________________________
La palabra imposible solo figura
en el diccionario de los tontos

"Luis Fernando Bedoya" escribió en el mensaje
news:
Tengo una tabla con mas de 2 millones de registros , a la cual le quiero
hacer un select por varios conceptos

ejem

fecha,documento,cedula,articulo,cliente

estoy haciendo un form de consulta de transacciones, donde se puede hacer
por uno de los campos o varios o mezcla de ellos.

ejem

por fecha
por cedula, fecha
por cliente,documento,articulo

etc

cual seria la forma mas eficiente de establecer los indices de esa tabla,
para que al hacer el select , el sistema tenga que generar el minimo


indice
temporal. y hacer mas rapida la consulta.

Gracias por sus sugerencias.









Respuesta Responder a este mensaje
#3 Luis María Guayán
07/04/2005 - 19:26 | Informe spam
lcTipoDoc = "FACT"
lcNumeroDoc = "00001234"

SELECT * FROM MiTabla ;
WHERE TipoDoc = lcTipoDoc AND ;
NumeroDoc = lcNumeroDoc ;
INTO CURSOR MiCursor

IF _TALLY > 0
MESSAGEBOX("Registro ENCONTRADO")
ELSE
MESSAGEBOX("Registro NO encontrado")
ENDIF


Luis María Guayán
Tucumán, Argentina
________________________________
SysOp de www.PortalFox.com
Microsoft Visual FoxPro MVP
________________________________
La palabra imposible solo figura
en el diccionario de los tontos

"Luis Fernando Bedoya" escribió en el mensaje
news:
Gracias Luis María

Una pregunta ,, las velocidades aumentan,

Como estoy emigrando mi aplicacion a cliente servidor
usualemnte usaba indexseek para ver si un registro ya existe ,
ejemplo

indexseek( tipodoc+numerodoc)
ahora con tu sugerencia, tengo dos indices uno para tipodoc y otro para
numerodoc

como me recomiendas que haga esta busqueda

con un select y ver si trae registros??? o ahi otra forma
Gracias por tu colaboracion


"Luis María Guayán" escribió en el mensaje
news:
> Si vas a trabajar con sentencias SELECTs para hacer tus busquedas,
> deberias
> tener solo un índice por campo:
> fecha,documento,cedula,articulo,cliente
>
> Luego en cada SELECT haces la combinación de campos que necesites.
>
> Ej:
> 1. por cedula, fecha
> SELECT * FROM MiTabla ;
> WHERE Cedula = lcCedula AND Fecha = ldFecha
>
> 2. cliente,documento,articulo
> SELECT * FROM MiTabla ;
> WHERE Cliente = lcCliente AND ;
> Documento = lcDocumento AND ;
> Articulo = lcArticulo
>
>
> Luis María Guayán
> Tucumán, Argentina
> ________________________________
> SysOp de www.PortalFox.com
> Microsoft Visual FoxPro MVP
> ________________________________
> La palabra imposible solo figura
> en el diccionario de los tontos
>
> "Luis Fernando Bedoya" escribió en el mensaje
> news:
>> Tengo una tabla con mas de 2 millones de registros , a la cual le


quiero
>> hacer un select por varios conceptos
>>
>> ejem
>>
>> fecha,documento,cedula,articulo,cliente
>>
>> estoy haciendo un form de consulta de transacciones, donde se puede


hacer
>> por uno de los campos o varios o mezcla de ellos.
>>
>> ejem
>>
>> por fecha
>> por cedula, fecha
>> por cliente,documento,articulo
>>
>> etc
>>
>> cual seria la forma mas eficiente de establecer los indices de esa


tabla,
>> para que al hacer el select , el sistema tenga que generar el minimo
> indice
>> temporal. y hacer mas rapida la consulta.
>>
>> Gracias por sus sugerencias.
>>
>>
>>
>>
>>
>
>


Respuesta Responder a este mensaje
#4 Luis Fernando Bedoya
07/04/2005 - 20:03 | Informe spam
Gracias por el consejo

hice la prueba con una base con 2.5 millones de registros y los tiempos de
busqueda bajaron significativamente.

del tiempos de 60 a 90 seg en equipo local
a
tiempos de hasta 20 seg para la misma consulta



en este mismo hilo hago otra preguenta para cambiar la forma de verificar si
un registro existe
Respuesta Responder a este mensaje
#5 Luis María Guayán
07/04/2005 - 20:37 | Informe spam
¿Cuantos registros retorna la consulta?

Los tiempos siguen siendo muy altos si solo retornas unos pocos registros.

¿Puedes copiar aquí tu SELECT, la estructura de tu tabla y las expresiones
de tus índices?

Luis María Guayán
Tucumán, Argentina
________________________________
SysOp de www.PortalFox.com
Microsoft Visual FoxPro MVP
________________________________
La palabra imposible solo figura
en el diccionario de los tontos



"Luis Fernando Bedoya" escribió en el mensaje
news:
Gracias por el consejo

hice la prueba con una base con 2.5 millones de registros y los tiempos de
busqueda bajaron significativamente.

del tiempos de 60 a 90 seg en equipo local
a
tiempos de hasta 20 seg para la misma consulta



en este mismo hilo hago otra preguenta para cambiar la forma de verificar


si
un registro existe


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida