Ir al contenido

Cuándo usa Salesforce un índice

También en 19 idiomas

English · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Українська · Español (México) · Français (Canada) · Deutsch (Schweiz)

A baggage carousel carrying a line of black suitcases, with one bright yellow suitcase among them.
Imagen generada con IA

Módulo 3 de 5 del capítulo Arquitectura de consultas y recuperación, capítulo 8 del curso Data Architect. Cada módulo se sostiene por sí solo. Anterior: Cómo encuentra Salesforce tus datos · Siguiente: Índices, skinny tables y rediseño

La pregunta que responde este módulo: ¿cuándo puede Salesforce usar un índice?

En el módulo anterior construimos el catálogo de fichas: qué es un índice, el coste de cada copia en cada guardado, y qué campos indexa Salesforce por ti, cuáles puedes pedir y cuáles no pueden tener índice en absoluto. Así que ya tenemos un índice. ¿Se puede usar en todas las circunstancias? No. Primero déjame contarte una historia.

Imagina una carrera callejera. Dos coches uno al lado del otro, con los motores rugiendo. Cerca del final, un piloto pulsa un botón y el coche sale disparado y gana. Ese botón es el nitro: un aporte de combustible extra que le da al motor un arranque de velocidad durante unos segundos.

Pero el nitro no se dispara solo porque pulses el botón. Un sistema de nitro suele estar hecho para dispararse solo cuando se cumplen tres cosas a la vez:

  1. El sistema está instalado y encendido. Sin nitro en el coche, no hay impulso.
  2. El piloto tiene el pedal pisado a fondo. Písalo a medias y el sistema sigue apagado.
  3. El motor está en el rango de velocidad adecuado. Demasiado lento o demasiado rápido, y el sistema no se dispara.

Las tres, y el coche sale disparado. Falla una sola, y simplemente vas conduciendo.

Un índice es el nitro de tu consulta. Y funciona igual: tienen que cumplirse tres cosas para que Salesforce lo use.

El cocheTu consulta
El nitro está instalado y encendidoHay un índice en el campo por el que filtras
El pedal está pisado a fondoPreguntas de forma selectiva: igual a, empieza por
El motor está en el rango adecuadoNo coinciden demasiados registros: estás por debajo del umbral

Este módulo las trata de una en una. Empecemos por la primera.

Empecemos por la pregunta para la que se construyó el catálogo. Acércate al mostrador y pide Fontanería básica. El bibliotecario va al cajón de fichas por título, encuentra la ficha, lee la estantería (B4), va hasta allí y baja el libro. Una ficha, un libro. En una biblioteca de 10 millones de libros, eso es una ficha y un libro en lugar de 10 millones de libros. Para eso sirve un índice, y es lo que hace Salesforce cuando filtras por un campo indexado: encuentra la entrada, lee a qué registro apunta y va directamente allí.

Ahora haz otra pregunta: “¿Me das todos los libros de Harbor Press?”. Tenemos cajones por título, por tema y por autor. ¿Hay un cajón por editorial? No. Entonces, ¿qué hace el bibliotecario? Recorre todos los pasillos y abre todos los libros. Eso es un recorrido de la tabla, y los tres cajones que pagamos no ayudaron en absoluto.

En Salesforce pasa lo mismo. Filtra por un campo que no está indexado, y los índices de los otros campos no pueden ayudar a ese filtro. Por eso importan las tablas del módulo anterior: antes de preocuparte por cualquier otra cosa, comprueba si el campo por el que filtras tiene un índice, estándar o personalizado. Esa es la primera de las tres: ¿está instalado el nitro?

Un cajón para la pregunta, o ninguno Tres zonas, de izquierda a derecha: la pregunta, los cajones de fichas del índice y las estanterías. Paso 1: alguien pide Plumbing Basics, por título, marcado como rápido. Una flecha azul marino etiquetada encontrar la ficha va a la ficha por título (Plumbing Basics, estantería B4), y una segunda flecha azul marino etiquetada coger el libro, rápido, va al libro de la estantería B4. Paso 2: la pregunta pasa a ser libros de Harbor Press, por editorial, marcada como lenta. Una flecha etiquetada preguntar a los cajones termina en una ficha gris, no hay cajón por editorial, marcada sin coincidencia. Una segunda flecha etiquetada rodear el índice, lento, pasa por debajo de los cajones hasta una ficha en las estanterías, recorrer todas las estanterías, abrir todos los libros uno a uno, marcada como lenta, y todos los libros están marcados como abiertos: Plumbing Basics (Harbor Press, estantería B4), Garden Design (North Field, estantería A1) y Home Wiring (Harbor Press, estantería C7). Debajo: por título, el cajón te lleva directo al libro, rápido; por editorial, no hay cajón, así que no hay coincidencia en el índice; rodéalo y abre todos los libros, un recorrido de la tabla, lento. LA PREGUNTA EL ÍNDICE: FICHAS EN CAJONES LAS ESTANTERÍAS “Plumbing Basics”, por favor por título fast Ficha por título Plumbing Basics → estantería B4 Ficha por tema home repair → estantería B4 Ficha por autor A. Ortiz → estantería B4 Plumbing Basics editorial: Harbor Press · estantería B4 Garden Design editorial: North Field · estantería A1 Home Wiring editorial: Harbor Press · estantería C7 encontrar la ficha coger el libro: rápido Por título, el cajón te lleva directo al libro: rápido. Por editorial, no hay cajón, así que no hay coincidencia en el índice; rodéalo y abre todos los libros: un recorrido de la tabla, lento. CÓMO LEERLO alguien que pregunta una ficha: un dato y la estantería un libro en su estantería © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Por título, hay un cajón: encuentra la ficha, coge el libro. Rápido.

Un cajón para la pregunta, o ninguno Tres zonas, de izquierda a derecha: la pregunta, los cajones de fichas del índice y las estanterías. Paso 1: alguien pide Plumbing Basics, por título, marcado como rápido. Una flecha azul marino etiquetada encontrar la ficha va a la ficha por título (Plumbing Basics, estantería B4), y una segunda flecha azul marino etiquetada coger el libro, rápido, va al libro de la estantería B4. Paso 2: la pregunta pasa a ser libros de Harbor Press, por editorial, marcada como lenta. Una flecha etiquetada preguntar a los cajones termina en una ficha gris, no hay cajón por editorial, marcada sin coincidencia. Una segunda flecha etiquetada rodear el índice, lento, pasa por debajo de los cajones hasta una ficha en las estanterías, recorrer todas las estanterías, abrir todos los libros uno a uno, marcada como lenta, y todos los libros están marcados como abiertos: Plumbing Basics (Harbor Press, estantería B4), Garden Design (North Field, estantería A1) y Home Wiring (Harbor Press, estantería C7). Debajo: por título, el cajón te lleva directo al libro, rápido; por editorial, no hay cajón, así que no hay coincidencia en el índice; rodéalo y abre todos los libros, un recorrido de la tabla, lento. LA PREGUNTA EL ÍNDICE: FICHAS EN CAJONES LAS ESTANTERÍAS ¿Libros de Harbor Press? por editorial slow Ficha por título Plumbing Basics → estantería B4 Ficha por tema home repair → estantería B4 Ficha por autor A. Ortiz → estantería B4 No hay cajón por editorial nada que encontrar no match Plumbing Basics editorial: Harbor Press · estantería B4 opened Garden Design editorial: North Field · estantería A1 opened Home Wiring editorial: Harbor Press · estantería C7 opened Recorrer todas las estanterías abrir todos los libros, uno a uno slow preguntar a los cajones rodear el índice: lento Por título, el cajón te lleva directo al libro: rápido. Por editorial, no hay cajón, así que no hay coincidencia en el índice; rodéalo y abre todos los libros: un recorrido de la tabla, lento. CÓMO LEERLO alguien que pregunta una ficha: un dato y la estantería un libro en su estantería © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Por editorial, no hay cajón: no hay coincidencia en el índice. Rodéalo y abre todos los libros: un recorrido de la tabla. Lento.

Ahora supongamos que sí hay un cajón. El cajón de títulos, ordenado de la A a la Z. ¿Qué preguntas puede responder rápido?

  • Encuentra el libro titulado Fontanería básica. Ve a la F, encuentra la ficha. Rápido.
  • Encuentra todos los libros cuyo título empieza por “Fontanería”. Ve a la F, lee las fichas que empiezan por “Fontanería” y para cuando dejen de hacerlo. Rápido.
  • Encuentra estos tres títulos. Tres viajes al cajón. Rápido.
  • Y con un cajón de fichas por fecha, encuentra todos los libros añadidos este año: ve a la primera ficha de este año y lee hasta que termine el año. Rápido.

Cada una de esas preguntas le dice al bibliotecario por dónde empezar en el cajón. Ahora, algunas preguntas que el mismo cajón no puede responder así:

  • Encuentra todos los libros cuyo título contiene “Fontanería”. “Avances en fontanería” está archivado en la A. “Guía de fontanería doméstica” está archivado en la G. El cajón está ordenado por cómo empieza un título, así que no hay ningún sitio por donde empezar a buscar. El cajón no puede responder, y el bibliotecario vuelve a recorrer todas las estanterías.
  • Encuentra todos los libros cuyo título termina en “básica”. El mismo problema: el final de un título no te dice nada sobre dónde está archivado.
  • Encuentra todos los libros que no son Fontanería básica. Casi todas las fichas coinciden. El cajón no acota nada.
  • Encuentra todos los libros sin título. En los cajones de Salesforce, no hay ficha para un valor vacío a menos que alguien la pidiera (lo vimos en el módulo anterior).

Ninguna de estas le dice al bibliotecario por dónde empezar. En clase lo digo así: los índices funcionan de izquierda a derecha. Pide el principio del valor y el índice puede ayudar. Pide el medio, el final, o todo excepto un valor, y no puede: no hay coincidencia en el índice, y Salesforce vuelve a un recorrido de la tabla.

Empieza por usa el cajón; contiene no puede Tres zonas, de izquierda a derecha: la pregunta, el cajón de títulos en orden de la A a la Z, y las estanterías. El cajón contiene Advanced Plumbing (archivado en la A, estantería C2), Garden Design (G, estantería A1), Home Plumbing Guide (H, estantería A7) y Plumbing Basics (P, estantería B4). Paso 1: alguien pide los títulos que empiezan por Plumbing (LIKE 'Plumbing%'), marcado como rápido. Una flecha azul marino etiquetada directo a la P, coincidencia, va a la ficha de Plumbing Basics, y una segunda flecha azul marino etiquetada coger el libro, rápido, va al libro de la estantería B4. Paso 2: la pregunta pasa a ser los títulos que contienen Plumbing (LIKE '%Plumbing%'), marcada como lenta. Una flecha etiquetada preguntar al cajón termina en una ficha gris, no hay forma de entrar en el cajón, está ordenado por cómo empiezan los títulos, marcada sin coincidencia. Una segunda flecha etiquetada rodear el índice, lento, pasa por debajo del cajón hasta una ficha en las estanterías, recorrer todas las estanterías, abrir todos los libros uno a uno, marcada como lenta, y todos los libros están marcados como abiertos. Debajo: empieza por va directo a la P, una ficha, un libro, rápido; contiene no encuentra coincidencia en el índice, así que rodéalo y abre todos los libros, un recorrido de la tabla, lento. LA PREGUNTA EL CAJÓN DE TÍTULOS, DE LA A A LA Z LAS ESTANTERÍAS El título empieza por “Plumbing” LIKE 'Plumbing%' fast Advanced Plumbing archivado en la A → estantería C2 Garden Design archivado en la G → estantería A1 Home Plumbing Guide archivado en la H → estantería A7 Plumbing Basics archivado en la P → estantería B4 Advanced Plumbing estantería C2 Garden Design estantería A1 Home Plumbing Guide estantería A7 Plumbing Basics estantería B4 directo a la P: coincidencia coger el libro: rápido Empieza por: directo a la P, una ficha, un libro: rápido. Contiene: el cajón está ordenado por cómo empiezan los títulos, así que no hay coincidencia en el índice; rodéalo y abre todos los libros: un recorrido de la tabla, lento. CÓMO LEERLO alguien que pregunta una ficha, archivada por cómo empieza el título un libro en su estantería © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Empieza por: directo a la P. Una ficha, un libro. Rápido.

Empieza por usa el cajón; contiene no puede Tres zonas, de izquierda a derecha: la pregunta, el cajón de títulos en orden de la A a la Z, y las estanterías. El cajón contiene Advanced Plumbing (archivado en la A, estantería C2), Garden Design (G, estantería A1), Home Plumbing Guide (H, estantería A7) y Plumbing Basics (P, estantería B4). Paso 1: alguien pide los títulos que empiezan por Plumbing (LIKE 'Plumbing%'), marcado como rápido. Una flecha azul marino etiquetada directo a la P, coincidencia, va a la ficha de Plumbing Basics, y una segunda flecha azul marino etiquetada coger el libro, rápido, va al libro de la estantería B4. Paso 2: la pregunta pasa a ser los títulos que contienen Plumbing (LIKE '%Plumbing%'), marcada como lenta. Una flecha etiquetada preguntar al cajón termina en una ficha gris, no hay forma de entrar en el cajón, está ordenado por cómo empiezan los títulos, marcada sin coincidencia. Una segunda flecha etiquetada rodear el índice, lento, pasa por debajo del cajón hasta una ficha en las estanterías, recorrer todas las estanterías, abrir todos los libros uno a uno, marcada como lenta, y todos los libros están marcados como abiertos. Debajo: empieza por va directo a la P, una ficha, un libro, rápido; contiene no encuentra coincidencia en el índice, así que rodéalo y abre todos los libros, un recorrido de la tabla, lento. LA PREGUNTA EL CAJÓN DE TÍTULOS, DE LA A A LA Z LAS ESTANTERÍAS El título contiene “Plumbing” LIKE '%Plumbing%' slow Advanced Plumbing archivado en la A → estantería C2 Garden Design archivado en la G → estantería A1 Home Plumbing Guide archivado en la H → estantería A7 Plumbing Basics archivado en la P → estantería B4 No hay forma de entrar en el cajón está ordenado por cómo empiezan los títulos no match Advanced Plumbing estantería C2 opened Garden Design estantería A1 opened Home Plumbing Guide estantería A7 opened Plumbing Basics estantería B4 opened Recorrer todas las estanterías abrir todos los libros, uno a uno slow preguntar al cajón rodear el índice: lento Empieza por: directo a la P, una ficha, un libro: rápido. Contiene: el cajón está ordenado por cómo empiezan los títulos, así que no hay coincidencia en el índice; rodéalo y abre todos los libros: un recorrido de la tabla, lento. CÓMO LEERLO alguien que pregunta una ficha, archivada por cómo empieza el título un libro en su estantería © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Contiene: no hay forma de entrar en el cajón, no hay coincidencia en el índice. Rodéalo y abre todos los libros: un recorrido de la tabla. Lento.

Esta es la misma lista en SOQL:

Pregúntalo asíEn SOQL¿Puede ayudar el índice?
Igual aName = 'Plumbing Basics'Sí
Empieza porName LIKE 'Plumbing%'Sí
Uno de una lista cortaId IN ('a01…', 'a02…', 'a03…')Sí
Un rango de fechas o númerosCreatedDate = THIS_YEAR, Amount > 10000Sí
ContieneName LIKE '%Plumbing%'No
Termina enName LIKE '%Basics'No
Distinto de, no como, no enName != 'Plumbing Basics'No
VacíoRegion__c = null, Name != ''No, por defecto

That’s not just my rule of thumb. Salesforce lists the cases where a custom index typically isn’t used, including “The filter operator is a negative operator such as NOT EQUAL TO (or !=), NOT CONTAINS, and NOT STARTS WITH” and “You’re comparing with an empty value (Name != ”)” (Working with Very Large SOQL Queries (se abre en una pestaña nueva), Apex Developer Guide, Winter ‘27). And: “Custom indexes are never used for the following operations: NOT EQUAL TO comparisons, null value comparisons (e.g., Name = ”), leading wildcard searches (e.g., Name LIKE ‘%Smith’)” (Developer Console Query Plan Tool FAQ (se abre en una pestaña nueva), Help, version 5). ⟲

Y si lo que de verdad necesitas es encontrar una palabra en cualquier parte del texto, recuerda las dos maneras de preguntar del módulo anterior: para eso están hechos FIND y el motor de búsqueda. El módulo 5 lo trata.

Así que hay dos cosas que comprobar antes de que un índice pueda acelerar tu consulta. Una: ¿hay un índice en el campo? Dos: ¿pides los datos de una manera que el índice pueda usar? Igual a, empieza por, una lista corta, un rango de fechas o números: sí. Contiene, termina en, distinto de, vacío: no.

Cuando preguntas de la segunda manera, digo que preguntas de forma selectiva. Esa es la palabra que hay que aprender: selectivo. Un filtro selectivo es uno que Salesforce puede responder a través de un índice en lugar de recorrer todos los registros. A los informes, las vistas de lista y SOQL les importa.

Salesforce’s own definition has one more part, and it’s the reason this module isn’t over yet: “A query is selective when one of the query filters is on an indexed field and the query filter reduces the resulting number of rows below a system-defined threshold” (Working with Very Large SOQL Queries (se abre en una pestaña nueva), Winter ‘27). An index, asked the right way, and not too many records. That’s the second of the three, the pedal all the way down. The third check, the engine in the right range, is where people get into trouble, and it comes next. ⟲

Conocimiento para el examen. Un filtro solo puede usar un índice si el campo está indexado y preguntas de forma selectiva. Selectivo: igual a, empieza por (LIKE 'abc%'), una lista IN corta, un rango de una fecha o un número. No selectivo: contiene y termina en (un % inicial), los operadores negativos (!=, NOT LIKE, NOT IN) y las comparaciones con un valor vacío.

Una nota sobre los campos cifrados. Si un campo está cifrado con Shield Platform Encryption, compruébalo antes de construir un filtro importante sobre él. Las propias páginas Well-Architected de Salesforce no coinciden hoy. Trust (se abre en una pestaña nueva) dice que el cifrado probabilístico no se puede usar para filtrar, ordenar ni agregar, y que el cifrado determinista permite filtros de coincidencia exacta. Data Protection Patterns (se abre en una pestaña nueva) dice que el cifrado probabilístico “admite todas las operaciones de consulta”. Lee las dos (consultadas el 2026-10-21) y prueba el filtro en tu propia organización.

Todo el mundo vive en Arizona: cuando un índice no ayuda

Sección titulada «Todo el mundo vive en Arizona: cuando un índice no ayuda »

Así que tienes un índice y lo preguntas de la manera correcta: igual a, nada sofisticado. ¿Basta con eso? No siempre. Este es el ejemplo que uso en clase.

Supongamos que tenemos las direcciones de 10 millones de personas de todo Estados Unidos, y el campo del estado está indexado. Pide a todos los de Arizona: State = 'AZ'. Arizona es una pequeña parte de todo el país, así que el índice reduce 10 millones de registros a un grupo pequeño. Ve al cajón, saca las fichas de Arizona, trae esos registros. Rápido. Eso es el índice haciendo su trabajo.

Ahora cambia los datos, no la consulta. El mismo campo, el mismo índice, el mismo State = 'AZ'. Pero esta vez todo el mundo vive en Arizona. Coinciden los 10 millones de registros. El índice no acota nada. Ir primero al índice y luego traer 10 millones de registros ficha a ficha es en realidad más lento que leer la tabla entera. El índice no está roto. Simplemente no es útil para esta pregunta.

Y esta es la clave: depende de lo que estés buscando. Quédate con los datos de todo Arizona y añade una persona en Texas. Pide State = 'TX': una coincidencia. El índice te lleva directamente a ese único registro. Rápido. Pide State = 'AZ' sobre los mismos datos: coincide casi todo. Lento. El mismo campo, el mismo índice, los mismos datos. La única diferencia es cuántos registros coinciden con lo que pediste. Cuando un gran número de registros coincide con lo que buscas, el índice deja de ayudar.

Vigila esto con campos como el estado de un caso. Status = 'Closed' puede ser un buen filtro al principio y dejar de serlo a medida que los casos cerrados se acumulan año tras año. Volveremos a ello en La trampa de los casos cerrados.

Todo el mundo vive en Arizona Tres zonas, de izquierda a derecha: la pregunta, el índice de State y los registros, 10 millones de direcciones. Paso 1: las personas son de todo Estados Unidos, y alguien pide State = 'AZ', marcado como rápido. Una flecha azul marino etiquetada directo a AZ va a las fichas de AZ, una pequeña parte de las fichas; una segunda flecha azul marino etiquetada traer los registros, rápido, va a los registros de Arizona, un grupo pequeño. Paso 2: todo el mundo vive en Arizona, y la misma pregunta, State = 'AZ', está marcada como lenta. Una flecha etiquetada coinciden todas las fichas va a las fichas de AZ, marcada demasiadas coincidencias; las fichas de los demás estados están vacías. Una segunda flecha etiquetada rodear el índice, lento, pasa por debajo del índice hasta una ficha, leer la tabla entera, todos los registros uno tras otro, marcada como lenta, y los registros de Arizona, los 10 millones, están marcados como abiertos. Paso 3: los mismos datos de Arizona más una persona en Texas, y alguien pide State = 'TX', marcado como rápido. Una flecha azul marino etiquetada directo a TX va a la única ficha de TX, y una segunda flecha azul marino etiquetada traer el registro, rápido, va al único registro de Texas. Debajo: el mismo campo, el mismo índice; Arizona dentro de todo el país, unas pocas fichas, rápido; Arizona cuando todo el mundo vive allí, coinciden todas las fichas, así que leer la tabla es más rápido; Texas con esos mismos datos, una ficha, rápido; decide lo que estás buscando. LA PREGUNTA EL ÍNDICE DE STATE LOS REGISTROS: 10 MILLONES DE DIRECCIONES State = 'AZ' personas de todo Estados Unidos fast Fichas de AZ una pequeña parte de las fichas Fichas de los demás estados la mayoría de las fichas Registros de Arizona un grupo pequeño directo a AZ traer los registros: rápido El mismo campo, el mismo índice. Arizona dentro de todo el país: unas pocas fichas, rápido. Arizona cuando todo el mundo vive allí: coinciden todas las fichas, así que leer la tabla es más rápido. Texas con esos mismos datos: una ficha, rápido. Decide lo que estás buscando. CÓMO LEERLO lo que buscas fichas del índice: el estado y dónde está el registro los registros © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Personas de todo Estados Unidos: Arizona es una pequeña parte. Rápido.

Todo el mundo vive en Arizona Tres zonas, de izquierda a derecha: la pregunta, el índice de State y los registros, 10 millones de direcciones. Paso 1: las personas son de todo Estados Unidos, y alguien pide State = 'AZ', marcado como rápido. Una flecha azul marino etiquetada directo a AZ va a las fichas de AZ, una pequeña parte de las fichas; una segunda flecha azul marino etiquetada traer los registros, rápido, va a los registros de Arizona, un grupo pequeño. Paso 2: todo el mundo vive en Arizona, y la misma pregunta, State = 'AZ', está marcada como lenta. Una flecha etiquetada coinciden todas las fichas va a las fichas de AZ, marcada demasiadas coincidencias; las fichas de los demás estados están vacías. Una segunda flecha etiquetada rodear el índice, lento, pasa por debajo del índice hasta una ficha, leer la tabla entera, todos los registros uno tras otro, marcada como lenta, y los registros de Arizona, los 10 millones, están marcados como abiertos. Paso 3: los mismos datos de Arizona más una persona en Texas, y alguien pide State = 'TX', marcado como rápido. Una flecha azul marino etiquetada directo a TX va a la única ficha de TX, y una segunda flecha azul marino etiquetada traer el registro, rápido, va al único registro de Texas. Debajo: el mismo campo, el mismo índice; Arizona dentro de todo el país, unas pocas fichas, rápido; Arizona cuando todo el mundo vive allí, coinciden todas las fichas, así que leer la tabla es más rápido; Texas con esos mismos datos, una ficha, rápido; decide lo que estás buscando. LA PREGUNTA EL ÍNDICE DE STATE LOS REGISTROS: 10 MILLONES DE DIRECCIONES State = 'AZ' todo el mundo vive en Arizona slow Fichas de AZ todas las fichas son AZ too many matches Fichas de los demás estados ninguna Registros de Arizona los 10 millones opened Leer la tabla entera todos los registros, uno tras otro slow coinciden todas las fichas rodear el índice: lento El mismo campo, el mismo índice. Arizona dentro de todo el país: unas pocas fichas, rápido. Arizona cuando todo el mundo vive allí: coinciden todas las fichas, así que leer la tabla es más rápido. Texas con esos mismos datos: una ficha, rápido. Decide lo que estás buscando. CÓMO LEERLO lo que buscas fichas del índice: el estado y dónde está el registro los registros © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Todo el mundo vive en Arizona: coinciden todas las fichas. Leer la tabla es más rápido. Lento.

Todo el mundo vive en Arizona Tres zonas, de izquierda a derecha: la pregunta, el índice de State y los registros, 10 millones de direcciones. Paso 1: las personas son de todo Estados Unidos, y alguien pide State = 'AZ', marcado como rápido. Una flecha azul marino etiquetada directo a AZ va a las fichas de AZ, una pequeña parte de las fichas; una segunda flecha azul marino etiquetada traer los registros, rápido, va a los registros de Arizona, un grupo pequeño. Paso 2: todo el mundo vive en Arizona, y la misma pregunta, State = 'AZ', está marcada como lenta. Una flecha etiquetada coinciden todas las fichas va a las fichas de AZ, marcada demasiadas coincidencias; las fichas de los demás estados están vacías. Una segunda flecha etiquetada rodear el índice, lento, pasa por debajo del índice hasta una ficha, leer la tabla entera, todos los registros uno tras otro, marcada como lenta, y los registros de Arizona, los 10 millones, están marcados como abiertos. Paso 3: los mismos datos de Arizona más una persona en Texas, y alguien pide State = 'TX', marcado como rápido. Una flecha azul marino etiquetada directo a TX va a la única ficha de TX, y una segunda flecha azul marino etiquetada traer el registro, rápido, va al único registro de Texas. Debajo: el mismo campo, el mismo índice; Arizona dentro de todo el país, unas pocas fichas, rápido; Arizona cuando todo el mundo vive allí, coinciden todas las fichas, así que leer la tabla es más rápido; Texas con esos mismos datos, una ficha, rápido; decide lo que estás buscando. LA PREGUNTA EL ÍNDICE DE STATE LOS REGISTROS: 10 MILLONES DE DIRECCIONES State = 'TX' todos en Arizona, más uno en Texas fast Fichas de AZ todas las fichas menos una Ficha de TX una ficha Registros de Arizona todos menos uno El único registro de Texas un registro directo a TX traer el registro: rápido El mismo campo, el mismo índice. Arizona dentro de todo el país: unas pocas fichas, rápido. Arizona cuando todo el mundo vive allí: coinciden todas las fichas, así que leer la tabla es más rápido. Texas con esos mismos datos: una ficha, rápido. Decide lo que estás buscando. CÓMO LEERLO lo que buscas fichas del índice: el estado y dónde está el registro los registros © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Los mismos datos, una persona en Texas: una ficha. Rápido. Decide lo que estás buscando.

Por qué demasiadas coincidencias es más lento

Sección titulada «Por qué demasiadas coincidencias es más lento »

Piensa otra vez en la biblioteca. Quieres un libro: encuentra la ficha, ve a la estantería, listo. Ahora quieres 9 millones de los 10 millones de libros, e insistes en usar el catálogo de fichas. Encuentra una ficha, ve a la estantería, vuelve al cajón, siguiente ficha, ve a otra estantería, vuelve… nueve millones de veces. Sería más rápido empezar por el primer pasillo y recorrer las estanterías una sola vez, en orden.

Salesforce incorpora ese límite al propio índice: “La tabla de índice impone límites superiores al número de registros que una búsqueda indexada puede devolver de forma eficaz” (Indexes (se abre en una pestaña nueva), Winter ‘27). Así que antes de usar un índice, Salesforce cuenta: ¿cuántos registros coincidirían con este filtro? Si la respuesta es una parte pequeña del objeto, el índice compensa. Si las coincidencias superan cierto porcentaje de los registros, Salesforce se salta el índice y lee la tabla.

Ese porcentaje tiene nombre: el umbral de selectividad. Recuerda la definición de Salesforce de una consulta selectiva: un campo indexado, preguntado de la manera correcta, y un filtro que “reduce el número de filas resultante por debajo de un umbral definido por el sistema”. Este es ese umbral, y es la tercera comprobación. Veamos las cifras.

¿Por qué importa tanto el umbral? La guía Well-Architected de Salesforce no lo suaviza: “La selectividad de las consultas es la mayor palanca individual para que una solución escale a millones de registros o agote el tiempo de espera con cientos de miles.” Y: “La selectividad es capacidad que no tienes que comprar” (Resource and Cost Optimization (se abre en una pestaña nueva)). Una consulta eficiente deja sitio a todos los demás inquilinos del edificio.

Salesforce fija la línea como un porcentaje de los registros, y el porcentaje depende del tipo de índice: una regla para un índice estándar, una más baja para un índice personalizado (Make Salesforce Platform SOQL Query Selective (se abre en una pestaña nueva), Help, versión 4). Empecemos por el caso sencillo y vayamos construyendo.

Empezar por lo sencillo: un índice estándar

Sección titulada «Empezar por lo sencillo: un índice estándar »

Toma el campo Name. Tiene un índice estándar. Supongamos que tenemos 100.000 cuentas. Para un índice estándar, la línea es el 30 % de los registros: 30.000.

Ahora pide Name LIKE 'Steve%'. Steve’s Plumbing, Steve’s Garage, unas cuantas más: pongamos 2.000 cuentas. 2.000 está por debajo de 30.000, así que el filtro es selectivo y Salesforce usa el índice. Rápido.

El mismo campo, el mismo índice, las mismas 100.000 cuentas. Ahora pide Name LIKE 'S%', todas las cuentas que empiezan por S. Pongamos que son 40.000. 40.000 está por encima de la línea. No es selectivo: Salesforce se salta el índice y lee la tabla.

Por debajo de la línea, o por encima Dos columnas de cuadraditos, cada cuadrado 1.000 cuentas, 100 cuadrados cada una, con una línea discontinua en 30.000, el umbral de un índice estándar. Primera columna: Name LIKE 'Steve%' coincide con 2.000, dos cuadrados azules abajo, por debajo de la línea; marcado selectivo. Segunda columna, las mismas 100.000 cuentas: Name LIKE 'S%' coincide con 40.000, cuarenta cuadrados ámbar que suben por encima de la línea; marcado no selectivo. Debajo: Name tiene un índice estándar, así que la línea es el 30 % de los registros, 30.000 de 100.000; Steve% coincide con 2.000, por debajo de la línea, y Salesforce usa el índice; S% coincide con 40.000, por encima, y Salesforce lee la tabla. cada cuadrado = 1.000 cuentas · línea discontinua = el umbral 30,000 coinciden 2.000 selectivo Name LIKE 'Steve%' 100.000 cuentas 30,000 coinciden 40.000 no selectivo Name LIKE 'S%' las mismas 100.000 cuentas Name tiene un índice estándar, así que la línea es el 30 % de los registros: 30.000 de 100.000. Steve% coincide con 2.000, por debajo de la línea: Salesforce usa el índice. S% coincide con 40.000, por encima: Salesforce lee la tabla. © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

El mismo índice, los mismos registros. Por debajo de la línea, se usa el índice. Por encima, no.

Los dos filtros preguntan de forma selectiva, con un “empieza por”. Los dos usan un campo indexado. La única diferencia es cuántos registros coinciden.

Entonces, ¿la línea es el 30%? Para el primer millón de registros, sí. A partir de ahí, Salesforce cuenta solo el 15 % de los registros que pasan del primer millón, y la línea nunca supera 1 millón. En palabras de Salesforce, el umbral estándar “llega a su máximo en 1 millón de registros objetivo en total, que solo podrías alcanzar si tuvieras más de 5,6 millones de registros en total” (misma fuente).

  • 500.000 registros: el 30 % de ellos, 150.000.
  • 1 millón de registros: el 30 % de ellos, 300.000.
  • 2 millones de registros: 300.000 por el primer millón, más el 15 % del segundo millón (150.000): 450.000.
  • 6 millones de registros: la cuenta daría 1.050.000, pero el tope es 1 millón. Ese es el máximo.
La línea estándar a medida que crece el objeto Cuatro columnas de cuadraditos, cada cuadrado 50.000 registros; en cada una, los cuadrados de color de abajo son el máximo de registros con que puede coincidir un filtro y seguir siendo selectivo, por debajo de una línea discontinua, con su cifra al lado. 500.000 registros: 150.000, el 30 % de ellos. 1 millón de registros: 300.000, el 30 %. 2 millones de registros: 450.000, 300.000 más el 15 % del segundo millón. 6 millones de registros: 1 millón, marcado el máximo, el tope. Debajo: un índice estándar, el 30 % del primer millón de registros más el 15 % de los registros a partir de ahí, nunca más de 1 millón; el tope solo se alcanza por encima de 5,6 millones de registros. cada cuadrado = 50.000 registros · en color, bajo la línea discontinua = el umbral 150,000 150,000 500.000 registros el 30 % de ellos 300,000 300,000 1 millón de registros el 30 % de ellos 450,000 450,000 2 millones de registros 300.000 + el 15 % del segundo millón 1 million 1 millón el máximo 6 millones de registros el tope: nunca más de 1 millón Un índice estándar: el 30 % del primer millón de registros, más el 15 % de los registros a partir de ahí, nunca más de 1 millón. El tope solo se alcanza por encima de 5,6 millones de registros. © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

La línea crece con el objeto, más despacio después del primer millón, y se detiene en 1 millón.

Mira lo que le pasa a la proporción. Con 1 millón de registros, un filtro puede coincidir con el 30 % y seguir siendo selectivo. Con 2 millones, el 22,5 %. Con 6 millones, menos del 17 %. Cuanto más grande es el objeto, más tiene que acotarlo un filtro. La guía Well-Architected de Salesforce lo dice del mismo modo: los umbrales “se endurecen a medida que un objeto supera su primer millón de registros” (Resource and Cost Optimization (se abre en una pestaña nueva)).

Índices personalizados: una línea más baja

Sección titulada «Índices personalizados: una línea más baja »

Ahora un índice personalizado. Volvamos a State = 'AZ': State no es un índice estándar, así que necesita uno personalizado. Un índice personalizado tiene una línea más baja: el 10 % del primer millón de registros, más el 5 % de los registros a partir de ahí, nunca más de 333.333 (misma fuente).

  • 100.000 registros: el 10 % de ellos, 10.000.
  • 1 millón de registros: el 10 % de ellos, 100.000.
  • 6 millones de registros: la cuenta daría 350.000, pero el tope es 333.333. El máximo.
Un índice personalizado tiene una línea más baja Tres columnas de cuadraditos, cada cuadrado 10.000 registros; en cada una, los cuadrados de color de abajo son el máximo de registros con que puede coincidir un filtro y seguir siendo selectivo, por debajo de una línea discontinua, con su cifra al lado. 100.000 registros: 10.000, el 10 % de ellos. 1 millón de registros: 100.000, el 10 %. 6 millones de registros: 333.333, marcado el máximo, el tope. Debajo: un índice personalizado, como uno en State, el 10 % del primer millón de registros más el 5 % de los registros a partir de ahí, nunca más de 333.333; con 6 millones de registros, eso es menos del 6 %. cada cuadrado = 10.000 registros · en color, bajo la línea discontinua = el umbral 10,000 10,000 100.000 registros el 10 % de ellos 100,000 100,000 1 millón de registros el 10 % de ellos 333,333 333,333 el máximo 6 millones de registros el tope: nunca más de 333.333 Un índice personalizado, como uno en State: el 10 % del primer millón de registros, más el 5 % de los registros a partir de ahí, nunca más de 333.333. Con 6 millones de registros, eso es menos del 6 %. © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Un índice personalizado: un tercio de la línea estándar y un tope de 333.333.

Así que con un millón de contactos, State = 'AZ' solo es selectivo si menos de 100.000 de ellos viven en Arizona. Y con 10 millones de contactos, la línea sigue siendo 333.333, alrededor del 3,3 %. Esa es la parte que la gente olvida: llega un momento en que los umbrales dejan de crecer. Por eso el diseño para grandes volúmenes no es “ponle un índice”. La pregunta es ¿cómo será la distribución a escala?

Conocimiento para el examen. Conoce los dos umbrales. Índice estándar: el 30 % del primer millón de registros, más el 15 % del resto, hasta 1 millón. Índice personalizado: el 10 % del primer millón, más el 5 % del resto, hasta 333.333. Prepárate para calcular uno: un índice estándar con 2 millones de registros permite 450.000; un índice personalizado con 1 millón permite 100.000.

Uno de mis ejemplos favoritos, porque la consulta funciona perfectamente en el lanzamiento. Un filtro sobre IsClosed = true. Al principio: 100.000 casos, 20.000 cerrados. Estupendo. Pasa el tiempo, y los casos tienen una costumbre interesante: se cierran. Ahora hay 10 millones de casos, 9 millones cerrados. No cambió nada de la consulta, el campo ni el código. Cambió la distribución. El filtro que antes acotaba la población ahora describe casi toda. Pasó de selectivo a no selectivo porque los datos envejecieron. Una consulta puede volverse mala sin que la consulta cambie.

Así que combino la selectividad con el Número de Ceros y el crecimiento. Si el cliente no tiene una proyección, uso un 30 % anual como base de planificación, no porque todos los negocios crezcan un 30 %, sino porque nos da algo contra lo que diseñar en lugar de fingir que el volumen de hoy es permanente. Empieza con 1,5 millones de registros: 1,95 millones el segundo año, 2,54 el tercero, 3,30 el cuarto, 4,28 el quinto, 5,57 el sexto. Con unos 5,6 millones de registros, el umbral personalizado sin máximo es 100.000 más el 5 % de 4,6 millones, 330.000: prácticamente el máximo de 333.333. A partir de ahí los datos siguen creciendo y el umbral personalizado, en la práctica, no. Haz esas cuentas antes de que te las enseñe producción.

Un treinta por ciento al año, y la línea personalizada Seis columnas de cuadraditos, cada cuadrado 25.000 registros, una columna por año con un crecimiento del 30 %; en cada una, los cuadrados de color por debajo de una línea discontinua son el umbral del índice personalizado. Año 1: 1,5 millones de registros, línea en 125.000, el 8,3 %. Año 2: 1,95 millones, 147.500, el 7,6 %. Año 3: 2,54 millones, 177.000, el 7,0 %. Año 4: 3,30 millones, 215.000, el 6,5 %. Año 5: 4,28 millones, 264.000, el 6,2 %. Año 6: 5,57 millones, 328.000, el 5,9 %, marcado cerca del tope. Debajo: los datos crecen un 30 % al año; la línea personalizada crece más despacio y se detiene en 333.333; el filtro selectivo de hoy puede convertirse en el problema de producción de mañana. cada cuadrado = 25.000 registros · en color, bajo la línea discontinua = el umbral personalizado 125,000 125,000 Año 1: 1,5 millones línea 125.000 · 8,3 % 147,500 147,500 Año 2: 1,95 millones línea 147.500 · 7,6 % 177,000 177,000 Año 3: 2,54 millones línea 177.000 · 7,0 % 215,000 215,000 Año 4: 3,30 millones línea 215.000 · 6,5 % 264,000 264,000 Año 5: 4,28 millones línea 264.000 · 6,2 % 328,000 328,000 cerca del tope Año 6: 5,57 millones línea 328.000 · 5,9 % Los datos crecen un 30 % al año; la línea personalizada crece más despacio y se detiene en 333.333. El filtro selectivo de hoy puede convertirse en el problema de producción de mañana. © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

El filtro selectivo de hoy puede convertirse en el problema de producción de mañana.

Dos 30 % distintos. No confundas este 30 % con otro 30 % que encontrarás en la guía Well-Architected de Salesforce. Reliability (se abre en una pestaña nueva) dice: “Crea margen fijando el 70 % de los límites del regulador como techo operativo en condiciones normales, y reserva el 30 % para picos inesperados.” Ese 30 % es margen de reserva bajo los límites del regulador de una transacción. El 30 % de aquí es la rapidez con que crecen los datos cada año. Cifras distintas para cosas distintas. Y fíjate en cómo describe Salesforce la cifra del 70 % en otra página: “una buena práctica de la comunidad muy citada, no una especificación oficial de Salesforce” (The Agentic Enterprise (se abre en una pestaña nueva)). Tómala como un buen consejo, no como una regla (páginas consultadas el 2026-10-22). Y recuerda: cuando tus registros principales crecen un 30 %, los registros que dependen de ellos pueden crecer más rápido. Cada cuenta nueva trae pedidos, cada pedido trae partidas, y todos ellos traen actividades e historial. Los objetos hijos y los datos transaccionales pueden multiplicar el crecimiento, y no siempre puedes saber cuál crecerá primero hacia un límite de Salesforce, o lo superará. Así que haz las cuentas para los hijos, no solo para los padres.

Steve Trucking: la consulta de hoy, cinco años después

Sección titulada «Steve Trucking: la consulta de hoy, cinco años después »

Lanzamiento con un millón de entregas; los coordinadores filtran a menudo por Status = 'Scheduled', unos 100.000 registros, el 10 %. Razonable. Cinco años después hay unos 9 millones de órdenes de trabajo acumuladas, pero el número de programadas en cada momento lo marca la ventana operativa, así que se mantiene pequeño. Ese filtro puede volverse incluso más selectivo a medida que crece el historial. Ahora Status = 'Completed': los registros completados se acumulan año tras año, y ese filtro cada vez acota peor. El mismo campo, el mismo índice, otro valor, otra distribución, otro comportamiento. Eso es la selectividad.

Más allá del examen: lo que cambia la IA. Un asistente de IA escribe WHERE Status = 'Completed' con la misma facilidad que un desarrollador, y funciona en una org de pruebas. Producción sigue teniendo el mismo optimizador, los mismos índices, umbrales y distribución. La IA no deroga la física de las bases de datos. Prueba las consultas generadas por IA con un volumen y una distribución realistas, no con 500 casos de ejemplo.

Volvamos a la carrera. Tienen que cumplirse tres cosas para que se dispare el nitro, y ahora conoces las tres para una consulta:

  1. Hay un índice en el campo por el que filtras. (El nitro está instalado.)
  2. Preguntas de forma selectiva: igual a, empieza por, una lista corta, un rango de fechas o números. (El pedal está pisado a fondo.)
  3. No coinciden demasiados registros: estás por debajo del umbral de ese índice, hoy y a medida que crecen los datos. (El motor está en el rango adecuado.)

Las tres, y Salesforce va al índice y tu consulta sale disparada. Falla una sola, y Salesforce lee la tabla: simplemente vas conduciendo. Y fíjate en que la tercera puede cambiar por sí sola. Los casos cerrados se acumulan, el objeto crece, y una consulta que tenía el impulso el año pasado no lo tiene este año.

Entonces, ¿quién comprueba las tres cada vez que se ejecuta una consulta? Ni tú ni el desarrollador. Ese es el trabajo del bibliotecario, y es el próximo módulo.

Conocimiento para el examen. Para que se use un índice, tienen que cumplirse tres cosas: el campo está indexado, el filtro es selectivo en su forma de preguntar (sin comodín inicial, sin operador negativo, sin comparación con un valor vacío) y el número de registros que coinciden está por debajo del umbral de selectividad.

  • Qué filtros de gran volumen deben seguir siendo selectivos hoy, y en el tercer año, el quinto y después.
  • Si los campos que usan esos filtros tienen un índice, estándar o personalizado, y si compensa su coste.
  • Si los filtros preguntan de forma selectiva, o dependen de contiene, termina en, distinto de o valores vacíos.
  • Si la distribución real de los valores, no solo la existencia de un índice, mantiene cada filtro por debajo de su umbral a medida que crecen los datos.
  • Qué consultas, incluidas las generadas por IA, hay que probar con un volumen y una distribución realistas antes de producción.

Sí, sábete los umbrales: estándar, el 30 % del primer millón más el 15 % del resto, con un máximo de 1 millón; personalizado, el 10 % más el 5 %, con un máximo de 333.333. Pero si eso es todo lo que aprendes, te perdiste la lección. El fichero de tarjetas solo es útil cuando ahorra suficiente trabajo; un filtro indexado que lo devuelve casi todo no es un atajo; y el mismo filtro puede pasar de selectivo a no selectivo a medida que los datos crecen y envejecen. Así que, cuando alguien diga “tranquilo, ese campo está indexado”, haz las tres preguntas. Luego haz las cuentas.