de Cristopher Chaverri

Lo Más Selectivo Primero


Cada vez que un índice compuesto es creado, el order de las columnas debe elegirse cuidadosamente. Índices concatenados Está dedicado a este tema.

Sin embargo, existe el mito de que siempre debe elegirse la columna más selectiva en la primera posición; esto es simplemente incorrecto.

Importante

La consideración más importante al definir un índice concatenado es cómo elegir el orden de las columnas para que pueda utilizarse con la mayor frecuencia posible.

Despúes de eso, incluso pueden existir varias razones para colocar primero la columna menos selectiva. Por ejemplo, la base de datos de Oracle puede utilizar un INDEX SKIP SCAN en ese caso. Pero esa es una funcionalidad avanzada. El factor más importante... mmm, ¿ya lo había dicho antes?

La verdadera esencia del mito está relacionada con la indexación de rangos independientes; este el único caso en el que la selectividad debe influir en el diseño del índice (véase Índice Merge: Combinar múltiples índices).

Este mito es extraordinariamente persistente en entornos de SQL Server e incluso aparece en la documentación oficial. La razón es que SQL Server mantiene un histograma solo para la primera columna del índice. Pero eso significa que la primera recomendación debería ser “primero las columnas con distribución desigual", ya que, de todos modos, los histogramas no son útiles para las columnas con distribución uniforme.

No soy el primero en combatir este mito. Aquí hay unas referencías más que lo desmienten:

No coloques automáticamente el término más selectivo en primer lugar en un índice concatenado

— Guy Harrison en “Oracle Performance Survival Guide

Uno de los cuentos de hadas más citados sobre los índices era la regla de “colocar primero la columna más selectiva“. Nunca fue una regla general sensata (salvo, posiblemente, antes de la versión 6.0).

— Jonathan Lewis en “Oracle Scratchpad

De nada sirve tener la columna más selectiva a la izquierda si muy pocas consultas filtran por ella. Las consultas que no filtran por esa, pero si lo hacen por otras columnas del índice, tendrán que realizar un escaneo y los escaneos son costosos.

— Gail Shaw en ”SQL (Server) in the Wild

Previous pageNext page

You can’t learn everything in one day. Subscribe the newsletter via E-Mail, Bluesky or RSS to gradually catch up. Have a look at modern-⁠sql.com as well.

Acerca del autor

Foto de Markus Winand

Markus Winand es defensor del resurgimiento del SQL. Su misión es la de presentar a los desarrolladores la evolución de SQL en el siglo XXI. Es posible contratar a Markus según disponibilidad o como orador o consultor en winand.at.

Adquiere tu libro

Portada de “Rendimiento SQL explicado”: Ardilla corriendo en la hierba

La esencia del tuning de SQL en 200 páginas

Compra ahora
(libro de bolsillo y/o PDF)

Contratar a Markus

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

Entrar en contacto con Markus

Suscríbete a listas de correoRSS FeedMarkus Winand en LinkedInMarkus Winand en XINGMarkus Winand en MastodonMarkus Winand en Bluesky
Copyright 2017-2026 Martin LE TARNEC, Markus Winand. All righs reserved.
Aspectos legales | Contacto | SIN GARANTÍA | Marcas | Privacidad y RGPD