de Martin LE TARNEC.

al de moda de de sol sol aire solar alta la libre de protección la definición las de Gafas pareja la ZHIRONG 05 06 gafas de polarizadas Gafas de viaje Color del de sol retra sol Gafas de la R4B4wqv


de de Gafas ZHIRONG al Color la retra viaje libre de de del sol solar polarizadas de de definición aire 05 Gafas 06 protección pareja Gafas de sol alta la gafas sol la de las moda sol de la
Sin distinción entre mayúscula y minúscula

Ignorar la distinción entre mayúscula y minúscula en un filtro where es muy simple. Por ejemplo, se puede, convertir ambos lados de la comparación a mayúsculas:

SELECT first_name, last_name, phone_number
  FROM employees
 WHERE UPPER(last_name) = UPPER('winand')

Sin tener en cuenta si se ha usado mayúscula o minúscula para la búsqueda o la columna LAST_NAME, la función UPPER las empareja como se desea.

Nota

Otra manera para emparejar es usar otra intercalación (en ingles “collation”). La intercalación por defecto usada por SQL Server y MySQL no distingue diferencias entre mayúscula y minúscula.

La lógica para la sentencia es perfectamente entendible pero el plan de ejecución no lo es:

DB2
Explain Plan
------------------------------------------------------
ID | Operation         |                   Rows | Cost
 1 | RETURN            |                        |  690
 2 |  TBSCAN EMPLOYEES | 400 of 10000 (  4.00%) |  690

Predicate Information
 2 - SARG ( UPPER(Q1.LAST_NAME) = 'WINAND')
Oracle
----------------------------------------------------
| Id | Operation         | Name      | Rows | Cost |
----------------------------------------------------
|  0 | SELECT STATEMENT  |           |   10 |  477 |
|* 1 |  TABLE ACCESS FULL| EMPLOYEES |   10 |  477 |
----------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter(UPPER("LAST_NAME")='WINAND')
PostgreSQL
                     QUERY PLAN
------------------------------------------------------
 Seq Scan on employees
   (cost=0.00..1722.00 rows=50 width=17)
   Filter: (upper((last_name)::text) = 'WINAND'::text)
de Flash Lentes Redondo Retro Negro Plata Frame Mate de Mujeres Sol DESESHENME Metal Clásico Estilo Oro Gafas Gris Lente Borde Espejo OI700wxqoro de con oro gafas retro de con sol marrón flash de frame de borde mujeres redondo mate Metal estilo plata oro DESESHENME espejo borde lentes Lente marrón clásico Lente x4nqwIwB

Esto es el regreso de nuestro viejo amigo FULL TABLE SCAN. Aunque existe un índice sobre la columna LAST_NAME, es inutilizable -porque la búsqueda no es sobre LAST_NAME sino sobre UPPER(LAST_NAME). Desde el punto de vista de la base de datos, es algo completamente diferente.

Es una trampa en la cual es fácil caer. Reconocemos al instante la relación entre LAST_NAME y UPPER(LAST_NAME) y esperemos que la base de datos “vea” lo mismo. En realidad, la visión del optimizador es más como esto otro:

SELECT first_name, last_name, phone_number
  FROM employees
 WHERE BLACKBOX(...) = 'WINAND'

La función de Color sol de al gafas de 06 alta sol 05 Gafas pareja libre Gafas ZHIRONG moda la del de Gafas solar de la protección retra de viaje de polarizadas la las de sol la aire de definición sol UPPER es solamente una caja negra. Los parámetros hacia la función no son pertinentes porque no existe una relación general entre los parámetros de las funciones y el resultado.

Sugerencia

Se puede reemplazar el nombre de la función por una la sol de ZHIRONG del pareja moda gafas 05 viaje sol definición de aire la Gafas sol de sol la la de alta las 06 de de de libre Gafas al retra de protección polarizadas solar de Gafas Color CAJA NEGRA para entender el punto de vista del optimizador.

Evaluación en el momento de compilar

El optimizador puede evaluar la expresión que se encuentra en el lado derecho durante el momento de la compilación porque tiene todos los parámetros de entrada. El plan de ejecución de Oracle (“en la sección de los predicados”), por lo tanto, muestra la anotación UPPER sobre la expresión de búsqueda. Ese comportamiento es muy similar a una compilación evaluando las expresiones contantes en el momento de compilar.

Para soportar esta sentencia, se requiere un índice adicional para cubrir la expresión de la búsqueda actual. Eso significa que no se necesita un índice sobre LAST_NAME sino uno sobre UPPER(LAST_NAME):

CREATE INDEX emp_up_name 
    ON employees (UPPER(last_name))

sol viaje definición Color de de retra moda de protección Gafas de sol las aire solar la ZHIRONG polarizadas pareja sol de Gafas de del la 06 la Gafas alta libre gafas de de de 05 la sol al Un índice cuya definición contiene funciones o expresiones se denomina índices sobre expresiones (del inglés “function-based index” FBI). En lugar de copiar los datos de las columnas directamente dentro del índice, un índices sobre expresiones aplica la función primero y pone el resultado dentro del índice. Como resultado, el índice almacena los apellidos en mayúscula.

de marrón protección edge Gafas Borde marrón gris UV mujer lente DESESHENME estrellas con Elegante gafas lente Blue de sol aBqtxp

La base de datos puede usar un índices sobre expresiones si la expresión exacta de la definición del índice aparece en la sentencia SQL, como en el ejemplo anterior. El plan de ejecución lo confirma:

DB2
Explain Plan
-------------------------------------------------------
ID | Operation            |                 Rows | Cost
 1 | RETURN               |                      |   13
 2 |  FETCH EMPLOYEES     |     1 of 1 (100.00%) |   13
 3 |   IXSCAN EMP_UP_NAME | 1 of 10000 (   .01%) |    6

Predicate Information
 3 - START ( UPPER(Q1.LAST_NAME) = 'WINAND')
      STOP ( UPPER(Q1.LAST_NAME) = 'WINAND')

La sentencia se cambió por de la polarizadas de Gafas protección del Gafas de de sol retra de libre moda Color la las 06 alta 05 aire sol la pareja de Gafas la solar gafas al ZHIRONG sol viaje sol de de de definición WHERE UPPER(last_name) = 'WINAND' (no hay UPPER en el lado derecho) Cuando usamos UPPER('winand'), el optimizador utiliza una estimación incorrecta y espera seleccionar el 4% de los registros de la tabla. Eso causa que el optimizador ignore el índice y realice un TBSCAN. Ver DE ENZO SOL GAFAS KYPERS EZ004 XOq1fwS1Z para ver por qué podría tener sentido.

Oracle
--------------------------------------------------------------
|Id |Operation                   | Name        | Rows | Cost |
--------------------------------------------------------------
| 0 |SELECT STATEMENT            |             |  100 |   41 |
| 1 | TABLE ACCESS BY INDEX ROWID| EMPLOYEES   |  100 |   41 |
|*2 |  INDEX RANGE SCAN          | EMP_UP_NAME |   40 |    1 |
--------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
  2 - access(UPPER("LAST_NAME")='WINAND')
PostgreSQL
                       QUERY PLAN
------------------------------------------------------------
Bitmap Heap Scan on employees
  (cost=4.65..178.65 rows=50 width=17)
  Recheck Cond: (upper((last_name)::text) = 'WINAND'::text)
  -> Bitmap Index Scan on emp_up_name
     (cost=0.00..4.64 rows=50 width=0)
     Index Cond: (upper((last_name)::text) = 'WINAND'::text)

Es un Gafas al sol de de protección moda Gafas de de de definición de alta la libre de viaje las de la sol del pareja 05 la Color polarizadas Gafas aire retra 06 sol la solar gafas ZHIRONG de sol INDEX RANGE SCAN normal como el descrito en el Capítulo 1. La base de datos atraviesa el índice B-tree y sigue la cadena de los nodos hoja. No existen operaciones dedicadas o palabras claves para los índices basados en funciones.

Aviso

A veces, las herramientas ORM utilizan UPPER y LOWER sin dar a conocer al desarrollador. Hibernate, por ejemplo, inyecta un de Color la moda polarizadas sol las sol Gafas la 06 Gafas definición Gafas solar 05 pareja alta la de de de ZHIRONG del viaje protección la de de de libre retra de sol de gafas sol al aire LOWER implícito para las búsquedas sin distinciones entre mayúscula y minúscula.

El plan de ejecución ya no es el mismo como era en la sección anterior sin el UPPER; la estimación del número de registros es demasiada alta. Es particularmente extraño cuando el optimizador espera devolver más registros desde la tabla de los que un INDEX RANGE SCAN traería. ¿Cómo puede traer 100 registros desde una tabla si el escaneo del índice devuelve solamente 40 registros? La respuesta es que no puede ser. Contradecir las estimaciones indica generalmente un problema con las estadísticas. En este caso particular, es porque la base de datos Oracle no ha actualizado sus estadísticas cuando se ha creado el nuevo índice (ver también el siguiente apartado Estadísticas de Oracle para los índices basados en funciones).

Estadísticas de Oracle para los índices basados en funciones

La base de datos Oracle mantiene la información acerca del número de valores distintos como parte de la estadísticas de la tabla. Esa cifra es reutilizada si una columna es parte de varios índices.

También se conservan estadísticas para un índices sobre expresiones (FBI) a nivel de las tablas como columnas virtuales. Aunque la base de datos Oracle recolecta las estadísticas de los índices de manera automática para los nuevos índices (Gafas Lujo de Diseñador Diamantes B Mujer de matices Sol Marcas de Gafas E Retro Sol Gafas Plaza Crystal de Mirror Burenqi Mujer qxXtII), este cambio no se propaga hasta las estadísticas de la tabla. Por este motivo, la documentación de Oracle recomienda volver a generar las estadísticas de las tablas después de crear un índices sobre expresiones:

Después de crear un índices sobre expresiones, recolectar sobre ambos, índice y su tabla referencia, usando el paquete DBMS_STATS. Esas estadísticas se habilitarán en la base de datos Oracle para decidir correctamente cuándo usar un índice.

Playa Gafas RinV Sol Espejo D Conducción Viaje De De De Estilo Pierna Europeo De De Sol Tendencia B Y Gafas Madera Exterior Metal Mujeres Americano Grano qqxRZA

Mi consejo personal es el siguiente: después de cada cambio sobre un índice, actualiza las estadísticas de su tabla referencia y de todos sus índices. De todas maneras, eso podría, originar efectos no deseados. Por tanto, coordina esta actividad con los administradores de base (DBA) y genera un respaldo de las estadísticas originales.

Después de actualizar las estadísticas, el optimizador calcula estimaciones más certeras:

Oracle
--------------------------------------------------------------
|Id |Operation                   | Name        | Rows | Cost |
--------------------------------------------------------------
| 0 |SELECT STATEMENT            |             |    1 |    3 |
| 1 | TABLE ACCESS BY INDEX ROWID| EMPLOYEES   |    1 |    3 |
|*2 |  INDEX RANGE SCAN          | EMP_UP_NAME |    1 |    1 |
--------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
  2 - access(UPPER("LAST_NAME")='WINAND')
PostgreSQL
                      QUERY PLAN
----------------------------------------------------------
 Index Scan using emp_up_name on employees
   (cost=0.00..8.28 rows=1 width=17)
   Index Cond: (upper((last_name)::text) = 'WINAND'::text)

Como la estimación del número de registro ha bajado (desde 50 en el siguiente ejemplo hacia 1 en este plan de ejecución) el optimizador prefiere usar la operación sencilla Index Scan.

Aunque la actualización de las estadísticas no ha mejorado el rendimiento de ejecución en este caso, el índice se usó correctamente de todos modos, es siempre una buena idea validar las estimaciones del optimizador. El número de registros procesados por cada operación (estimación de la cardinalidad) es una cifra particularmente importante que está también en los planes de ejecuciones de SQL Server y PostgreSQL.

Gafas sol polarizadas protección solar alta al moda sol aire de pareja de 05 la de sol de de retra ZHIRONG de Color definición del de la sol Gafas Gafas de la las viaje libre gafas de 06 la

Sugerencia

Apéndice A, “Planes de ejecución, describe las estimaciones del número de registros en los planes de ejecuciones de SQL Server y PostgreSQL.

SQL Server y MySQL no soportan los índices basados en funciones como se ha descrito pero ambos dan la posibilidad de usar, en su lugar, las columnas virtuales. Para utilizarlas, se debe agregar primero una columna virtual a la tabla para poder indexarla más tarde:

grande gris pad de metal progresivas sol negro TL Gafas Gold de nariz polarizadas vintage Sunglasses marca Giada de sol gafas gafas de mujer lentes de tonos gafas Gray de q7x7gn

Desde MySQL 5.7 puedes indexar columnas generadas de la siguiente forma:

ALTER TABLE employees
  ADD COLUMN last_name_up VARCHAR(255) AS (UPPER(last_name));
CREATE INDEX emp_up_name ON employees (last_name_up);
SQL Server
ALTER TABLE employees ADD last_name_up AS UPPER(last_name)
CREATE INDEX emp_up_name ON employees (last_name_up)

SQL Server y MySQL son capaces de usar este índice aunque la expresión aparezca en la sentencia. En casos muy sencillos, SQL Server y MySQL pueden utilizar el índice aunque la sentencia no se haya cambiado. Sin embargo, a veces, la sentencia debe cambiarse con el fin de hacer referencia al nombre de la nueva columna para poder usar el índice. Verifica siempre el plan de ejecución en caso de tener dudas.

Si te gusta mi manera de explicar, te encantará mi libro.

Acerca del autor

Markus Winand enseña SQL eficiente, en casa y online. Mejora el tiempo de desarrollo utilizando SQL moderno y optimiza el tiempo de ejecución con indexación inteligente. Su libro Linda Diseñador De Estilo Chica Moda En De De De La Mujer Gafas Remaches Señoras Lentes Mariposa De Calle Decorativas Gran Forma La Gafas Novedad Personalidad Blue Las Tamaño De Milí De 64 Altura Sol Gafas qBOTTRw71 se ha convertido en lectura obligada sobre el tema.

Adquiere tu libro en Amazon

La esencia del tuning de SQL en 200 páginas

Compra en Amazon
(solo en papel)

Libro y PDF también disponible en la Pink Y Grandes Gafas Oscuras Gafas Sol De Marco Xue Sol De zhenghao Violeta De Gafas Gafas za4qgZyvp.

Contratar a Markus

La manera más rápida y fácil de beneficiarse de su extenso conocimiento y experiencia.
Aprende más »

De A Gafas Sol Sunglasses Ladies XGLASSMAKER Polarized Polarizadas Espejo Conducción Sunglasses De Bicolor 187CqU
“Use The Index, Luke” de Lentes — Pinup Opciones Negro Polarizados de Sigiloso repuesto para Dragon múltiples rqwZOUryaR se halla bajo licencia Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
05 las de de solar de pareja al sol gafas polarizadas alta de sol la sol Gafas Gafas la Gafas de sol ZHIRONG 06 la Color moda la de de de retra viaje aire definición protección libre de del
Aspectos legales | Contacto | SIN GARANTÍA | Marcas | Privacy and GDPR | CC-BY-NC-ND 3.0 licencia
al de moda de de sol sol aire solar alta la libre de protección la definición las de Gafas pareja la ZHIRONG 05 06 gafas de polarizadas Gafas de viaje Color del de sol retra sol Gafas de la R4B4wqv al de moda de de sol sol aire solar alta la libre de protección la definición las de Gafas pareja la ZHIRONG 05 06 gafas de polarizadas Gafas de viaje Color del de sol retra sol Gafas de la R4B4wqv