none
Cuál es la manera más eficiente de hacer lo que explico (a quienes tengan experiencia en base de datos) RRS feed

  • Pregunta

  • Verán tengo una base de datos con una tabla de aproximadamente veinte mil registros, tiene campos nombre, documento de identidad y otros quince campos más.

    Lo que quiero hacer es visualizar en una lista a manera de menú con los dos primeros campos: nombre y documento de identidad de manera que el usuario pueda elegir un nombre y cuando lo elija muestre en otra pantalla el resto de campos para editar, borrar, etc.

    La duda que tengo es cómo sería mejor guardar esta información (en términos de velocidad de procesamiento). Veo las siguientes opciones:

    1º Disponer los dos campos en una tabla aparte y vincularla con otra tabla que contenga el resto de campos o

    2º Poner todos los campos en una sola tabla y visualizar con SELEC por ejemplo los dos primeros campos.

    Cuál de las dos opciones sería más eficiente. A lo mejor tienen otra idea mejor, por favor sugerencias.

    domingo, 17 de enero de 2016 23:36

Respuestas

  • Esa es una ventaja de usar un buen servidor de base de datos como SQL Server: No es necesario indicarle cuál es el índice que tiene que usar. Cuando le envías una consulta, internamente decide una estrategia óptima para resolverla. Por ejemplo, si ve que solo le has pedido dos campos del registro, y encuentra que un índice contiene esos dos campos, entonces los saca del propio índice en lugar de sacarlos de la tabla. Como el índice es más compacto que la tabla, eso requiere leer menos páginas de datos desde el disco, con lo cuál resulta más eficiente. Todo esto lo hace el servidor sin que tengas que decirle nada desde Visual Studio; simplemente le envías la Select y el servidor usa la mejor estrategia para resolverla.
    • Marcado como respuesta James-2016 lunes, 18 de enero de 2016 23:33
    lunes, 18 de enero de 2016 19:27

Todas las respuestas

  • Si en lugar de veinte mil registros tuvieras veinte mil millones, entonces las cosas serán distintas. Pero con veinte mil, ni te preocupes. Guárdalo todo en una sola tabla, y usa un Select para traer los dos primeros al selector. Cuando elijan una entrada, vuelves a hacer un Select que te traiga todos los campos (solo de ese registro).

    Sí, correría un pelín más si tuvieras una tabla con solo los dos primeros campos y el resto en otra, pero con los registros que tienes no se va a notar. En cualquier caso, si creas un índice sobre esos dos campos, el servidor de base de datos recorrerá sólo el índice (sin leer el resto de los campos) cuando hagas la primera select, con lo que será perfectamente eficiente incluso aunque tuvieses millones de registros.

    lunes, 18 de enero de 2016 7:16
  • Gracias, me queda claro entonces que con veinte, treinta mil registros la diferencia no sería muy notoria. 

    Lo del uso de índices no me queda claro, porfavor despéjeme esta duda:

    La base de datos la estoy diseñando en SQL Server, allí defino los campos clave y también los índices, entiendo que esas definiciones quedan guardadas en la base de datos ¿no? lo que no me queda claro es cómo le digo a Visual Net que use el índice definido.

    Gracias de antemano por la respuesta.

    lunes, 18 de enero de 2016 18:55
  • Esa es una ventaja de usar un buen servidor de base de datos como SQL Server: No es necesario indicarle cuál es el índice que tiene que usar. Cuando le envías una consulta, internamente decide una estrategia óptima para resolverla. Por ejemplo, si ve que solo le has pedido dos campos del registro, y encuentra que un índice contiene esos dos campos, entonces los saca del propio índice en lugar de sacarlos de la tabla. Como el índice es más compacto que la tabla, eso requiere leer menos páginas de datos desde el disco, con lo cuál resulta más eficiente. Todo esto lo hace el servidor sin que tengas que decirle nada desde Visual Studio; simplemente le envías la Select y el servidor usa la mejor estrategia para resolverla.
    • Marcado como respuesta James-2016 lunes, 18 de enero de 2016 23:33
    lunes, 18 de enero de 2016 19:27