Introducción

1

¿Ya terminaste el Curso de NestJS: Programación Modular?

2

Platzi Store: presentación del proyecto e instalación

Database

3

Cómo instalar Docker para este proyecto

4

Configuración de PostgresSQL en Docker

5

Explorando postgres con interfaces gráficas y terminal

6

Integración de node-postgres con NestJS

7

Conexión como inyectable y ejecutando un SELECT

8

Usando variables de ambiente

TypeORM

9

¿Qué es un ORM? Instalando y configurando TypeORM Module

10

Creando tu primera entidad

11

TypeORM: active record vs. repositories

12

Crear, actualizar y eliminar

13

Cambiar a Mysql demo (opcional)

Migraciones

14

Sync Mode vs. Migraciones en TypeORM

15

Configurando migraciones y npm scripts

16

Corriendo migraciones

17

Modificando una entidad

Relaciones

18

Relaciones uno a uno

19

Resolviendo la relación uno a uno en el controlador

20

Relaciones uno a muchos

21

Resolviendo la relación uno a muchos en el controlador

22

Relaciones muchos a muchos

23

Resolviendo la relación muchos a muchos en el controlador

24

Manipulación de arreglos en relaciones muchos a muchos

25

Relaciones muchos a muchos personalizadas

26

Resolviendo la relación muchos a muchos personalizada en el controlador

Consultas

27

Paginación

28

Filtrando precios con operadores

29

Agregando indexadores

30

Modificando el naming

31

Serializar

Migración a NestJS 9 y TypeORM 0.3

32

Actualizando Dependencias para NestJS 9

33

Cambios en TypeORM 0.3

34

Migraciones en TypeORM 0.3

Próximos pasos

35

Cómo solucionar una referencia circular entre módulos

36

Continúa con el Curso de NestJS: Autenticación con Passport y JWT

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Agregando indexadores

29/36
Recursos

¿Qué es la indexación y cómo funciona en bases de datos?

En el mundo de las bases de datos, la indexación es un concepto crucial que optimiza las consultas al hacer que el acceso a los datos sea más rápido. No importa si estamos hablando de bases de datos relacionales o no relacionales; la indexación es una herramienta potente. Al crear índices, le decimos a la base de datos que ciertos parámetros son más importantes para las consultas frecuentes, lo que acelera significativamente el tiempo de respuesta para dichas consultas. A pesar de sus ventajas, es vital usar la indexación con cuidado, ya que su uso excesivo puede llevar a ineficiencias.

¿Cómo implementar la indexación en el código?

Implementar la indexación en el código es un proceso bastante sencillo, especialmente si se están utilizando decoradores en lenguaje de programación orientado a objetos. Aquí te mostramos cómo hacerlo:

  1. Selecciona el parámetro a indexar: Decide cuál es el campo que deseas que sea más eficiente en las consultas. Un ejemplo común es el campo precio en una tabla de productos.

  2. Usa el decorador index: Emplea un decorador llamado index, que por ejemplo se puede obtener de bibliotecas como TimeOrAmp. Esto indicará que ese campo específico va a estar indexado.

  3. Ejecuta una migración: Dado que la indexación implica un cambio en la estructura de la base de datos, es necesario correr una migración para que el sistema actualice la propia base.

@Entity()
export class Product {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Index()
  @Column()
  price: number;

  @Column()
  stock: number;
}

¿Cómo hacer indexaciones conjuntas?

Además de indexar un solo campo, es posible también realizar indexaciones conjuntas, lo cual es útil cuando las consultas simultáneas sobre varios campos son comunes. Por ejemplo, podrías indexar tanto el precio como el stock juntos. Aquí te explicamos cómo:

  • Agregar el decorador al nivel de tabla: Aplicando el decorador index a la tabla con un array que incluya los parámetros que quieres indexar conjuntamente.

  • Ejecutar una migración adicional: Tras hacer estos cambios, se necesita nuevamente correr una migración para que los índices sean aplicados de manera efectiva.

@Entity()
@Index(['price', 'stock'])
export class Product {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  price: number;

  @Column()
  stock: number;
}

¿Cuáles son los cuidados a tener en cuenta con la indexación?

Si bien la indexación ofrece ventajas en términos de velocidad, debe utilizarse estratégicamente:

  • No sobre-indexar: Es un error común aplicar índices a todos los campos de una tabla. Esto puede saturar la base de datos, ya que si todo es una prioridad, nada lo es realmente.

  • Considerar el tamaño de la base de datos: En bases de datos no muy grandes, la diferencia en tiempos de respuesta gracias a la indexación puede ser mínima. La indexación muestra su verdadera eficacia cuando se trabaja con conjuntos de datos grandes.

  • Optimizar para consultas frecuentes: Es fundamental elegir qué campos indexar en función de las consultas más usuales en tu aplicación. De esta manera, el rendimiento se verá maximizado donde más se necesita.

Con esta información, estás listo para aplicar indexación en tus bases de datos de manera eficiente, aprendiendo a sacarle el mayor provecho sin comprometer el rendimiento general del sistema. ¡Sigue explorando y mejorando tus habilidades!

Aportes 4

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Apuntes

Los indexadores nos sirven para optimizar una búsqueda a través de uno o mas atributos, por defecto el id esta indexado.

Solo debemos indexar algunos campos, si priorizamos todos los campos al final ningún campo lo será.

Para ello solo debemos agregar el decorator @Index()


//
...

@Entity()
@Index(['price', 'stock'])
export class Product {
  @PrimaryGeneratedColumn()
...
}

No olvides correr las migraciones

npm run migrations:generate -- index-product
npm run migrations:run

Si todo es importante nada lo es.

Agregando indexadores

Las indexaciones son un proceso que mediante unos parámetros nos ayuda a resolver la información de forma más rápida, lo que significa que en base a estos nos van a permitir priorizar recursos en las consultas para que estas sean más veloces.

Cabe recalcar que se debe usar la indexación de forma estratégica solo en las consultas más usadas en nuestra aplicación, ya que si abusamos de esta estrategia y todo es prioritario en nuestra aplicación, al final nada lo es.

En TypeORM no puede ser más fácil, vamos a la entidad de productos y veamos como se hace:

@Entity()
export class Product {
  // ...

  @Column({ type: 'int' })
  // este decorador indica que el campo precio va a estar indexado
  // todas las consultas que tengan que ver con el precio serán más rapidas
  @Index()
  price: number;
}

También podemos hacer indexaciones conjuntas, lo que significa que la consulta de dos propiedades consultadas a la vez tendrán prioridad. En caso de que queramos hacer una indexación conjunta, la tenemos que declarar como decorador directamente de la clase.

@Entity()
// en un array enviamo los atributos que esten indexados de forma conjunta
@Index(['price', 'stock'])
export class Product {
  // ...
}

Y listo, con correr una migración más ya vas a tener los indexadores agregados a la tabla de productos.

👏