none
Como acelerar una busqueda RRS feed

  • Pregunta

  • Buenas Tardes, Si tengo una tabla de articulos que tiene casi 12000 registros cuando yo hago click a la lupa para buscar el producto y agregarlo este se demora de echo carga pero demora hay alguna forma que no demore o es por la cantidad de registros, es decir se queda pensando para arrojarme este formulario 

    al dar click en la lupa demora casi menos o igual 1 min pero demora comparado a otros.

    En otro post he visto que dicen paginar el dgv como es eso? filtrar no porque necesito tenerlos todos ademas tengo una caja de filtro textbox por nombre, pero el tema es al momento de llamar este formulario no es cuando ya esta cargado. 

    En un foro ASP encontre de una propiedades AllowPaging pero en Visual Basic Net no tiene eso

    • Editado AcuTau jueves, 19 de mayo de 2016 23:27
    jueves, 19 de mayo de 2016 23:02

Respuestas

  • JackJJ,

    12000 filas no es mucho o por lo menos no lo suficiente como para que esperes algo mas de un minuto. Me pongo en un escenario optimista entendiendo que el tiempo de respuesta en que retorna los datos tu servidor es el óptimo y que cuentas con la infraestructura adecuada para dar soporte a dicha transferencia.

    Consideraciones:

    1. Ejecuta la consulta sobre una ventana de SQL Server Managment Studio y controla los tiempos de respuesta: ¿demora igual que desde tu aplicación? ¿La consulta que retorna los datos es compleja? ¿tus tablas están denormalizadas y contienen los índices necesarios para optimizar las búsquedas?
    2. Si el tiempo de respuesta desde una ventana de consultas es inmediato entonces pasamos a ver como es que ejecutas las consultas desde tu aplicación: ¿utilizas objetos DataSet, DataTable? ¿Cargas los datos a través de un objeto que contiene el conjunto de resultados?. Para estos casos lo mas performante es hacer uso de objetos DataReader y desechar los pesados DataTable's y demás.
    3. ¿Tu infraestructura de red es la adecuada?

    Dejando de lado las consideraciones, ¿qué función cumple el cuadro de búsqueda? Digo, entiendo lo trivial de mi pregunta pero ¿el cuadro de búsqueda no debería ser el punto inicial de filtro?, es decir,  la grilla debería presentarse vacía en la carga del formulario y posterior a que el usuario haya ingresado algún criterio de búsqueda se debería poblar la grilla con los resultados. ¿Es de esperar que el usuario haga búsquedas fila tras fila a través de los 12 mil registros?

    Esperamos tu feed-back

    • Marcado como respuesta AcuTau viernes, 20 de mayo de 2016 16:42
    viernes, 20 de mayo de 2016 0:35

Todas las respuestas

  • JackJJ,

    12000 filas no es mucho o por lo menos no lo suficiente como para que esperes algo mas de un minuto. Me pongo en un escenario optimista entendiendo que el tiempo de respuesta en que retorna los datos tu servidor es el óptimo y que cuentas con la infraestructura adecuada para dar soporte a dicha transferencia.

    Consideraciones:

    1. Ejecuta la consulta sobre una ventana de SQL Server Managment Studio y controla los tiempos de respuesta: ¿demora igual que desde tu aplicación? ¿La consulta que retorna los datos es compleja? ¿tus tablas están denormalizadas y contienen los índices necesarios para optimizar las búsquedas?
    2. Si el tiempo de respuesta desde una ventana de consultas es inmediato entonces pasamos a ver como es que ejecutas las consultas desde tu aplicación: ¿utilizas objetos DataSet, DataTable? ¿Cargas los datos a través de un objeto que contiene el conjunto de resultados?. Para estos casos lo mas performante es hacer uso de objetos DataReader y desechar los pesados DataTable's y demás.
    3. ¿Tu infraestructura de red es la adecuada?

    Dejando de lado las consideraciones, ¿qué función cumple el cuadro de búsqueda? Digo, entiendo lo trivial de mi pregunta pero ¿el cuadro de búsqueda no debería ser el punto inicial de filtro?, es decir,  la grilla debería presentarse vacía en la carga del formulario y posterior a que el usuario haya ingresado algún criterio de búsqueda se debería poblar la grilla con los resultados. ¿Es de esperar que el usuario haga búsquedas fila tras fila a través de los 12 mil registros?

    Esperamos tu feed-back

    • Marcado como respuesta AcuTau viernes, 20 de mayo de 2016 16:42
    viernes, 20 de mayo de 2016 0:35
  • Hola,

    1.- Desde el sql carga rapido, respecto a la tabla Articulos esta dado por los campos,

    IdArticulo int autoincrementado Pk

    IdCategoria in

    NomArt nvarchar(200)

    2.- 

    Private Sub BuscarProducto_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            oCommandBuilder = New SqlCommandBuilder(Me.oDataAdapter)
            oDataAdapter = New SqlDataAdapter("Select IdArticulo,ArtNombre from Articulo ORDER BY IdArticulo", conex)
            oDataTable = New DataTable
            oDataAdapter.Fill(oDataTable)
            dgvArticulo.DataSource = oDataTable
            Me.dgvArticulo.AllowUserToAddRows = False
            Me.dgvArticulo.AllowUserToDeleteRows = False
            Me.dgvArticulo.DataSource = oDataTable
            Me.lblRegistros.Text = String.Format("Total de Registros: {0}", oDataTable.Rows.Count)

    3.- Respecto a esa pregunta no te entiendo bien, Solo uso una donde tengo el sql el visual net.

    La grilla carga automaticamente bueno asi lo he colocado, pues no he probado lo que indicas que recien al escribir arroje los resultado sera de ver el filtro esta dado por nombre, bueno en la mayoria de ejemplo o casos que he visto, se ve que la grilla carga todo y cuando escriben segun el filtro esta se va filtrando como te digo no he probado lo que mencionas quizas eso de que cargue vacio y con el filtro se llene pueda ser mejor .

    Lo probare y bueno suena que puede resultar optimo 

    viernes, 20 de mayo de 2016 16:23
  • Definitivamente la solucion estaba en el filtro como indicas y eso mejoro mucho la carga 

    le quite el fill al load,y al buscar segun el filtro los valores salieron rapido.

    Gracias

    viernes, 20 de mayo de 2016 16:36