¿Cómo se realiza la coincidencia de cadenas en SQL?

Suponiendo que el entorno es un mundo db bastante “típico”, donde tiene almacenamiento estructurado en filas e índices de B-Tree, las comprobaciones de cadenas en una base de datos relacional tienden a ser bastante sencillas.

La principal complejidad es que los motores db rara vez usan “cadenas C” terminadas en NUL simples, ya que existen muchas ventajas de rendimiento al saber cuánto dura una cadena antes de intentar “caminarla”. Aquí hay una breve publicación que escribí sobre las cadenas de motor DB: ¿Cómo se ve una cadena de motor db?

La mayoría de las cadenas en una base de datos relacional estructurada en filas tienden a ser bastante cortas; raramente más de unas pocas docenas de bytes de longitud, y a menudo mucho menos. Además, la mayoría de las pruebas realizadas en cadenas son pruebas de igualdad u ordenamiento para que las filas se puedan ordenar.

Entonces, la mayoría de los motores db terminan con algo parecido a strcmp, y generalmente uno optimizado para la igualdad de cadenas. Ambos están codificados para que manejen su estructura de datos de cadena de manera extremadamente eficiente. Tenga en cuenta que estos tendrán que manejar conjuntos de caracteres y colaciones, pero en principio son lógicamente los mismos que la versión simple de C-String.

Como mencioné en mi publicación, una gran diferencia entre las cadenas C y las cadenas almacenadas del motor de base de datos es que la longitud de la cadena está codificada en la parte delantera de la cadena, por lo que tiene una forma muy rápida de verificar la desigualdad simplemente comparando el recuento de bytes, y solo recorre la cadena para verificar si los recuentos de bytes son iguales si desea una prueba de igualdad.

Además, la mayoría de las bases de datos SQL modernas tienen algún tipo de controlador de expresiones regulares, por lo menos, para manejar las expresiones regulares simples en la declaración LIKE, pero también se manejan de una manera relativamente sencilla, con la complejidad principal en torno a conjuntos de caracteres de varios bytes y procesamiento de colación.