POLITICA DE COOKIES

Q2BSTUDIO.COM utiliza cookies técnicas, analíticas, de sesión y de publicidad con la finalidad de prestar un mejor servicio. No obstante, necesitamos su consentimiento explícito para poder utilizarlas. Así mismo puede cambiar la configuración de las cookies u obtener más información aquí .

Práctica 6: Filtrado por campo enumerado para acelerar consultas volcando datos a archivos

Práctica 6: Filtrado por campo enumerado para acelerar consultas al volcar datos a archivos

Publicado el 20/08/2025

Un campo enumerado solo puede tomar varios valores discretos. Al filtrar por un campo enumerado f, las condiciones habituales son f = v1 o f = v2 o …, f != v1 y f != v2 y …, in o not in. La base de datos compara f con n valores y cuando la tabla de hechos es grande el número de comparaciones aumenta mucho reduciendo el rendimiento. A mayor valor de n, menor rendimiento.

Si no se realizan comparaciones directas durante el filtrado, el rendimiento mejora considerablemente. La solución llamada alignment sequence disponible en esProc SPL convierte la comparación múltiple en accesos por posición, logrando acelerar las consultas al eliminar comparaciones repetidas de valores.

Para ilustrarlo tomamos la tabla orders. Primero hay que determinar el rango de valores del campo enumerado. El campo customer_id tiene una tabla de dimensión asociada, por lo que su rango es conocido. Otros campos como employee_id o employee_name pueden no tener tabla de dimensión y entonces es necesario un prerecorrido de la tabla de hechos para generar la dimensión. En el ejemplo suponemos que no hay employee_id y que los nombres de empleado son únicos.

En las prácticas previas ya se ha generado la tabla de dimensión employee y la tabla orders puede ser sustituida por una versión numerizada ordersQ3.ctx. Con ello se dispone de la tabla employee numerizada y listo para crear la secuencia de alineación.

Ejemplo 6.1 Buscar registros de orders donde employee_name sea name10 o name101 y contar el número de pedidos por fecha. La versión SQL típica sería select order_date, count(1) from orders where employee_name = name10 or employee_name = name101 group by order_date. En la prueba esa consulta SQL tarda 20 segundos en ejecutarse.

Con SPL y la secuencia de alineación la ejecución se reduce drásticamente hasta 0.1 segundos. El paso clave es construir una secuencia booleana del mismo tamaño que la tabla employee en la que cada posición indica si el nombre en la dimensión está incluido en la lista de búsqueda. La función contain evalúa la pertenencia en la dimensión y crea true o false por posición.

Una vez creada la secuencia de alineación el filtrado en la tabla orders no compara cadenas: dado el employee_num que aparece en orders se recupera el valor booleano en la secuencia en la misma posición; si es true el registro cumple la condición. De este modo la comparación de cadenas se transforma en una lectura por posición en una secuencia booleana, operación mucho más rápida y con coste independiente del tamaño de la lista de valores buscados.

La técnica alternativa sin secuencia de alineación exige obtener el employee_name desde la tabla de dimensión para cada fila de orders y comparar la cadena con la lista objetivo, operación que es más costosa cuando la tabla de hechos es grande.

Ejemplo 6.2 Buscar registros de orders que incluyan 10 nombres de empleados como name10, name101, etc. En SQL se usaría employee_name in (lista) y la consulta en la prueba tardó 16 segundos. Con SPL y la secuencia de alineación, la misma operación tardó aproximadamente 0.15 segundos y solo hay que añadir más nombres a la lista de la función de construcción de la secuencia.

Ejemplo 6.3 Buscar registros de orders cuyo customer_id pertenezca a clientes de la ciudad con city_id = 35 y sumar shipping_fee. En SQL se emplea una subconsulta select sum(shipping_fee) from orders where customer_id in (select customer_id from customer where city_id = 35) y en la prueba tardó 13 segundos. Con SPL y la secuencia de alineación la ejecución se redujo a 0.1 segundos. En este caso la búsqueda por clave primaria customer_id frente a la recuperación por posición muestra tiempos similares cuando la dimensionalidad ya está numerizada, pero la ventaja de la secuencia de alineación es evidente cuando filtrar exige comparar valores no numéricos o listas extensas.

En resumen, la secuencia de alineación convierte comparaciones repetitivas sobre valores enumerados en accesos por índice a una secuencia booleana precalculada. Esto reduce la complejidad de coste por fila y logra grandes mejoras de rendimiento, especialmente con listas largas de valores o tablas de hechos voluminosas.

Resumen de rendimiento en las pruebas: filtrado por nombre con OR: SQL 20 segundos versus SPL 0.1 segundos; filtrado por 10 nombres con IN: SQL 16 segundos versus SPL 0.15 segundos; filtrado mediante subconsulta por ciudad: SQL 13 segundos versus SPL 0.1 segundos. Las cifras muestran el impacto de evitar comparaciones repetidas y aprovechar accesos por posición.

Ejercicios propuestos: 1 Buscar registros de orders donde la ciudad del cliente tenga city_id 3 y obtener el total de pedidos. 2 Reflexión crítica: en sus bases de datos habituales ha afrontado filtrados costosos por campos enumerados en tablas grandes? Podría aplicar la secuencia de alineación para acelerar esos procesos y cómo lo integraría en su flujo ETL o en su capa de consultas?

Recursos y código fuente: SPL es de código abierto y el repositorio oficial está disponible en https://github.com/SPLWare/esProc. Si desea probar la herramienta puede descargarla desde https://www.esproc.com/download-esproc/

Sobre Q2BSTUDIO: Q2BSTUDIO es una empresa de desarrollo de software y aplicaciones a medida especializada en soluciones empresariales. Ofrecemos software a medida, desarrollo de aplicaciones a medida y servicios profesionales de inteligencia artificial para empresas. Contamos con experiencia en ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio y consultoría en power bi. También diseñamos agentes IA y soluciones de ia para empresas que integran modelos de machine learning, automatización y pipelines de datos. Nuestra oferta incluye desarrollo de soluciones personalizadas, auditorías de seguridad, despliegue en la nube y creación de cuadros de mando con power bi para la toma de decisiones.

Si su equipo necesita acelerar consultas, mejorar el rendimiento de procesamiento de datos o integrar capacidades de inteligencia artificial y ciberseguridad en sus aplicaciones a medida, Q2BSTUDIO puede ayudarle a diseñar e implementar la solución óptima. Nuestras áreas clave incluyen aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi.

Contacto: visite nuestra web o solicite una consultoría para evaluar cómo técnicas como la secuencia de alineación pueden integrarse en su arquitectura de datos y mejorar el rendimiento de sus procesos analíticos y aplicaciones empresariales.

Fin del artículo, inicio de la diversión
Construyendo software juntos

Dando vida a tus ideas desde 2008

Diseñamos aplicaciones móviles y de escritorio innovadoras que cumplen con tus requisitos específicos y mejoran la eficiencia operativa.
Más info
Cuéntanos tu visión
Sea cual sea el alcance, podemos convertir tu idea en realidad. Envíanosla y charlemos sobre tu proyecto o una colaboración futura.
Contáctanos
artículos destacados
Live Chat
Enviado correctamente.

Gracias por confiar en Q2BStudio