Foros del Web » Programación para mayores de 30 ;) » .NET »

VB - Minimizar el tiempo de busqueda de un registro en BD SQL SERVER

Estas en el tema de VB - Minimizar el tiempo de busqueda de un registro en BD SQL SERVER en el foro de .NET en Foros del Web. Buenos Dias Hace algun tiempo realize una aplicacion para llevar control de inventarios algo sencillo, utilize visual basic 2010 express y sql server. Ahora la ...
  #1 (permalink)  
Antiguo 30/04/2011, 12:37
 
Fecha de Ingreso: mayo-2005
Mensajes: 5
Antigüedad: 19 años, 6 meses
Puntos: 0
Pregunta VB - Minimizar el tiempo de busqueda de un registro en BD SQL SERVER

Buenos Dias

Hace algun tiempo realize una aplicacion para llevar control de inventarios algo sencillo, utilize visual basic 2010 express y sql server.

Ahora la base de datos llego a 160.000 usuarios, y por lo tanto se me presento un pequeño detalle que habia pasado por alto. al hacer una consulta al ultimo usuario de la base de datos se me demora entre 10 segundos a 20 segundos, demasiado tiempo.

SQL SERVER: Para crear la base de datos utilize:
------------------------------------------------------------------------------------------
CREATE TABLE USUARIOS1 (Documento varchar(15)PRIMARY KEY CLUSTERED,
Tipo varchar(3), APELLIDO_1 varchar(15), APELLIDO_2 varchar(20),
NOMBRE_1 varchar(15), NOMBRE_2 varchar(20), Eps varchar(50),
Edad varchar(8), Direccion varchar(30), Telefono varchar(10),
Estrato varchar(2), Sexo varchar(10), Contrato varchar(15))
-----------------------------------------------------------------------------------------

VB: Para conectarme a la base de datos utilize:
----------------------------------------------------------
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
----------------------------------------------------------
cn.Open("Provider=SQLOLEDB; " & _
"Initial Catalog=MI BD; " & _
"Data Source=ALEX\SQLEXPRESS; " & _
"User Id=admin;Password=******* ;")
----------------------------------------------------------

'DEFINO LAS CARACTERISTICAS DEL RECORDSET

rs.ActiveConnection = cn
rs.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
rs.LockType = ADODB.LockTypeEnum.adLockOptimistic

-------------------------------------------------------------------------
'PARA REALIZAR LA BUSQUEDA Y COLOCAR EL DATO EN TEXTBOX

rs.Open("select * from USUARIOS1")

rs.Find("Documento = '" & TextBox1.Text & "'")

If rs.BOF = False And rs.EOF = False Then

TextBox2.Text = rs.Fields(1).Value
TextBox3.Text = rs.Fields(2).Value

Else
MsgBox("No se ha podido localizar el registro")
TextBox1.Focus()
End If

rs.Close()

--------------------------------------------------------------------------------------------

Buenos como vemos el codigo es sencillo y realizo lo que quiero, en algunos formularios utilizo para la busqueda:

rs.Filter = "Documento = '" & TextBox1.Text & "'"

Pero sigue igual de lenta la busqueda.

Quisiera que me ayudaran con alguna otra forma para que la busqueda sea mas rapida le agradeceria mucho.
  #2 (permalink)  
Antiguo 01/05/2011, 11:04
 
Fecha de Ingreso: enero-2004
Ubicación: mexico
Mensajes: 110
Antigüedad: 20 años, 9 meses
Puntos: 0
Respuesta: VB - Minimizar el tiempo de busqueda de un registro en BD SQL SERVER

El principal problema q identifico es que tu proceso consulta todos los registros de la base de datos y una vez en en control del programa buscas la coincidencia.

Para optimizar esto lo que debes hacer es hacer la consulta justamente en el motor de la base de datos ya que fueron diseñados para efectuar este tipo de manejo de datos.

El cambio consiste en la línea

rs.Open("select * from USUARIOS1")

Y dejarla así

rs.Open("select * from USUARIOS1 where Documento = '" & TextBox1.Text & "' ")

De esta manera delegas el proceso de búsqueda a la base de datos y solo obtienes los registros que coinciden.
__________________
Controles Web para ASP.NET (Tabstrip, Datepicker, Calendar, Panel colapsable...) en
www.enlasys.com

Etiquetas: bd, minimizar, registro, server, sql, vb, busquedas
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 03:57.