PDA

Ver la Versión Completa : ¿ Locate o TQuery ?


llonigualker
11-03-2007, 10:20:34
Hola:

Para la inmensa mayoria, seguro que esta es una pregunta tonta pero me gustaria saber vuestra opinion segun vuestras experiencias.

Tengo una tabla Paradox en red con mas de 500.000 registros ( y creciendo ), actualmente, para localizar un solo registro utilizo el LOCATE (ahora la localizacion se hace eterna).

Yo supongo que el locate recorre la tabla por completo registro por registro y comparando.

¿Me recomendais cambiar el locate por un query con su correspondiente sentencia sql?. Yo pienso que seria mas rapido pero esperare vuestras opiniones.

Espero vuestras opiniones.

Saludos.

marcoszorrilla
11-03-2007, 11:29:37
Pues con ese número de registros yo crearía un índice y utilizaría:
MiTabla.FindKey([Edit1.Text]);

Un Saludo.

llonigualker
11-03-2007, 11:52:00
pero con esa busqueda accedes al primero que encuentre, tendrias que hacer el indice con todos los campos que quieras que coincidan, no?

marcoszorrilla
11-03-2007, 14:35:33
Como hablas de localizar un registro, entiendo que es clave única, sino lo dicho no tendría sentido pues como comentas solamente localizarías el primero.

Si buscas una coincidencia en la que pueden verse involucrados varios registros y además quieres visualizar los que coinciden en una rejilla, solamente puedes utilizar una Consulta o un filtro.

Si quieres contar cuantos registros coinciden con un criterio entonces mejor utiliza una consulta.

Un Saludo.

llonigualker
11-03-2007, 14:57:39
se trata de lo siguiente:

imaginate una tabla de ciudadanos, con nombre, apellido, direccion, telefono, etc, con 500.000 registros.

Segun he entendido al definir el indice, tendria que añadir los campos nombre, apellido, direccion, etc....

y en el findkey supongo que seria tabla.findkey([variable1, variable2, ...., variablex])

Esta busqueda solo se hace para comprobar un determinado valor de un campo booleano (que tambien lo incluiria en el indice y en el findkey), no es para mostrar nada, si cumple esa condicion se hace una cosa y si no la cumple se hace otra.

Este metodo del findkey es mas rapido que el locate (ahora mismo esa tabla esta sin indexar)?

saludos.

basti
11-03-2007, 17:43:03
En el caso del BDE, y de algunos otros motores, locate y findkey son igual de rápidos.

Sacado de la ayuda de delphi:

Locate uses the fastest possible method to locate matching records. If the search fields in KeyFields are indexed and the index is compatible with the specified search options, Locate uses the index. Otherwise Locate creates a filter for the search.


Vamos, que si existe un índice para los campos de la búsqueda, locate lo usará.