Problemas con tiempos de expiracion de mi sistema

03/03/2005 - 23:55 por German | Informe spam
Mi consulta es la siguiente,

En mi base de datos tengo una tabla con alrededor de 6 000 000 de registros
de nombre de personas y empresas. Yo necesito realizar busquedas por nombre y
devolver a la aplicacion
las primeras 250 coincidendias, para eso utilizo el like '%' + StringABuscar
'%', y sobre el campo nombre tengo creado un indice. He realizado pruebas y
cuando realizo busquedas con coincidencias este me las devuelve en un tiempo
optimo, sin embargo cuando hago busqueda con palabras que no tienen
coincidencias sobre la tabla, la consulta agota el tiempo de expiracion del
sistema y el programa se cae. Alguien me puede dar una ayuda para resolver
este inconveniente.

. MI llave primaria es una identificacion de tipo numerica ya que necesito
trabajar con otras tablas relacionadas.

Gracias.

German.

Preguntas similare

Leer las respuestas

#1 MAXI
04/03/2005 - 00:40 | Informe spam
Hola German para esto te aconsejo que utilices fulltextsearch (no se como se
dice en español :()



Maxi
Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)



"German" escribió en el mensaje
news:
Mostrar la cita
#2 Jorge Bustos
04/03/2005 - 01:05 | Informe spam
Ten en cuenta que la búsqueda que quieres realizar implica recorrer todos
los 6.000.000 de campos de texto, uno a uno, para buscar las coincidencias.
Y, además, no existe modo de optimizarla mediante índices.

Quizás te convenga más utilizar las funcionalidades de full text search.
Echa un vistazo a:
CONTAINS
FREETEXT
y temas relacionados en los BOL

Un saludo,
Jorge Bustos

"German" wrote in message
news:
Mostrar la cita
registros
Mostrar la cita
nombre y
Mostrar la cita
StringABuscar
Mostrar la cita
y
Mostrar la cita
tiempo
Mostrar la cita
del
Mostrar la cita
necesito
Mostrar la cita
#3 Alejandro Mesa
04/03/2005 - 01:55 | Informe spam
German,

Cuando usas el operador de comparacion LIKE y el primer caracter del patron
es el '%', entonces la expresion no es considerada un argumento de busqueda y
por lo tanto sql server no hara uso de algun indice definido por esa columna.

Ejemplo:

use northwind
go

execute sp_helpindex employees
go

set showplan_text on
go

select lastname, firstname, employeeid
from dbo.employees
where lastname like '%a%'
go

set showplan_text off
go

Veras que en el plan de ejecucion, sql server prefirio scanear el indice
clustered y no hacer un "index seek" del indice "LastName". Si ahora ejecutas:

set showplan_text on
go

select lastname, firstname, employeeid
from dbo.employees
where lastname like '%a%'
go

set showplan_text off
go

Veras que esta vez sql server escoge hacer un "Index Seek" en "LastName"
seguido por un "Bookmark Lookup", puesto que el indice es nonclustered.

Coincido con Maxi y Jorge, que para busquedas de patrones de caracteres con
este nivel de complejidad tendrias mejor resultado si usas el servicio
full-text search.


AMB

"German" wrote:

Mostrar la cita
#4 Alejandro Mesa
04/03/2005 - 01:59 | Informe spam
Correccion,

Si ahora ejecutas:

set showplan_text on
go

select lastname, firstname, employeeid
from dbo.employees
where lastname like 'a%'
go

set showplan_text off
go
...


AMB

"Alejandro Mesa" wrote:

Mostrar la cita
Ads by Google
Search Busqueda sugerida