Cómo optimizar Microsoft Access al usar orígenes de datos ODBC

Avanzado: requiere conocimientos expertos de codificación, interoperabilidad y multiusuario.

Este artículo solo se refiere a una base de datos de Microsoft Access (.mdb o .accdb).

Resumen

En este artículo se describen varias sugerencias para mejorar el rendimiento al acceder a datos desde un origen de datos ODBC.

Más información

Use las sugerencias siguientes para mejorar el rendimiento con orígenes de datos ODBC:

  • Restrinja la cantidad de datos que solicita al servidor. No pida más datos de los que necesita. Use consultas para seleccionar solo los campos y filas que necesita.

  • Use solo la funcionalidad que necesita. Las instantáneas son menos eficaces que los conjuntos dinámicos y no se pueden actualizar. Sin embargo, las instantáneas pueden ser más rápidas, especialmente para conjuntos de registros pequeños sin campos memo o objeto OLE.

  • Cree tablas vinculadas (adjuntas) para acceder a los datos del servidor. Evite el acceso "directo" al servidor (es decir, no abra bases de datos remotas y ejecute consultas en ellas). En su lugar, cree tablas adjuntas o cree consultas de paso a través.

  • Diseñar cuadros de lista y cuadros combinados con prudencia. En un formulario, cada cuadro de lista, cuadro combinado, subformulario y control que contiene un total requiere una consulta independiente. En los datos locales, el rendimiento puede ser adecuado. Sin embargo, en los datos remotos, pueden producirse retrasos prolongados al abrir un formulario porque cada consulta debe enviarse al servidor y se debe devolver una respuesta antes de que se pueda abrir el formulario.

  • Evite cuadros combinados grandes. Incluir un cuadro combinado con cientos o incluso miles de opciones basadas en una tabla local puede producir un tiempo de respuesta aceptable, especialmente si define un índice adecuado en la tabla local. Sin embargo, en una tabla remota, este tipo de cuadro combinado produce un rendimiento lento porque agota los recursos de servidor y red a medida que captura datos para rellenar la lista. Es mejor limitar el número de filas devueltas al cuadro combinado cuando se trabaja con datos remotos. También puede dividir los datos en cuadros combinados más pequeños (teniendo en cuenta la sugerencia anterior).

  • Use el comando Buscar solo en conjuntos de registros más pequeños. El motor de base de datos de Microsoft Jet optimiza el comando Find para que funcione bien con conjuntos de registros locales de casi cualquier tamaño y con conjuntos de registros remotos de tamaño razonable. Sin embargo, si tiene grandes conjuntos de registros remotos (miles de registros o más), en su lugar debe crear un filtro o una consulta y también tener cuidado de usar las restricciones que el servidor puede procesar.

  • Asegúrese de que las consultas se envían al servidor para su procesamiento. El factor más importante en el rendimiento de las consultas con datos remotos es garantizar que el servidor ejecute la mayor parte posible de la consulta. El motor de base de datos de Microsoft Jet intenta enviar toda la consulta al servidor, pero evalúa localmente las cláusulas y expresiones de consulta que generalmente no son compatibles con servidores o con el servidor determinado. La funcionalidad no admitida por los servidores en general incluye lo siguiente:

  • Operaciones que no se pueden expresar en una sola instrucción SQL. Esta situación puede producirse cuando se usa una consulta como entrada para otra consulta o cuando la cláusula FROM de la consulta contiene una consulta Totals o una consulta DISTINCT. A menudo, puede reorganizar las consultas para calcular los totales después de todas las demás operaciones.

    • Operaciones que son extensiones específicas del motor de base de datos de Microsoft Jet para SQL, como consultas de tabla cruzada, consultas TOP e informes con varios niveles de agrupación y totales. Tenga en cuenta que las consultas crosstab simples se pueden enviar a los servidores.
    • Expresiones que contienen funciones o operadores específicos de Microsoft Access. Las funciones financieras y los agregados estadísticos de Microsoft Access no tienen equivalentes de servidor.
    • Funciones de Visual Basic para Application definidas por el usuario que toman columnas remotas como argumentos. Estas funciones no existen en el servidor, pero deben procesar datos de columna remotos. Sin embargo, si una función definida por el usuario devuelve un valor único y no hace referencia a una columna remota, la función se evalúa localmente y su valor se envía al servidor para su procesamiento.
    • Combinación de tipos de datos numéricos y de texto en operadores o salidas de consulta UNION. La mayoría de los servidores carecen de la clemencia de tipo de datos de Microsoft Access. Por este motivo, use funciones de conversión explícitas cuando corresponda.
    • Combinaciones heterogéneas entre tablas locales y tablas remotas, o entre tablas remotas en diferentes orígenes de datos ODBC. Las combinaciones entre tablas locales pequeñas y tablas remotas grandes, donde se indexa la columna de combinación, pueden dar lugar a una combinación de índice remota. En una combinación de índice remota, se envía al servidor una consulta por cada fila de la tabla local y solo se devuelven las filas que se unen.
    • Expresiones no remotas o expresiones que no se pueden enviar de forma remota, porque el servidor no las puede evaluar. Las expresiones de salida no remotas (las de la cláusula SELECT) no fuerzan la evaluación local de la consulta a menos que se produzcan en una consulta Totales, una consulta DISTINCT o una consulta UNION. Las expresiones no remotas en otras cláusulas (WHERE, ORDER BY, GROUP BY, HAVING, etc.) fuerzan al menos una parte de la consulta a evaluarse localmente.
  • Los servidores difieren en algunas áreas de funcionalidad admitida. Al adjuntar una tabla remota, el motor de base de datos de Microsoft Jet consulta al controlador ODBC por sus funcionalidades. Si el controlador y el servidor admiten la funcionalidad necesaria, el motor de base de datos de Microsoft Jet envía la operación al servidor para su procesamiento. Si no es así, el motor de base de datos de Microsoft Jet realiza la operación localmente. Entre las áreas de soporte técnico diferentes se incluyen (pero no se limitan a) las siguientes:

    • Combinaciones externas. Tenga en cuenta que el motor de base de datos de Microsoft Jet no envía varias combinaciones externas a un servidor, aunque muchas combinaciones internas pueden acompañar a una única combinación externa.
    • Funciones numéricas, de cadena y de fecha y hora, como Log(), Mid$(), DatePart(), etc.
    • Funciones de conversión, como CInt(), CStr(), CVDate(), etc.