Cómo crear índices en SwiftData

Es fundamental optimizar las consultas a las bases de datos para asegurar que los usuarios disfruten de la mejor experiencia posible. Una de las estrategias más efectivas para lograr consultas eficientes es el uso de índices.

Los índices añaden metadatos a los modelos, especificando qué propiedades deben ser optimizadas, especialmente aquellas que se utilizan con frecuencia en operaciones de persistencia, ya sea de lectura o escritura.

Si quieres una introducción a Swift Data, te recomendamos este artículo.

El macro #Index

Consideremos el siguiente modelo:

import SwiftData
@Model
class Product {
var name: String
var quantity: Int
var expirationDate: Date
var category: ProductCategory
}

Este modelo representa una versión simplificada de una clase para una aplicación de inventario. Es común que la propiedad name se utilice con frecuencia para realizar operaciones de filtrado, como búsquedas o consultas específicas.

Para agregar un índice al modelo, basta con incluir la siguiente línea de código:

#Index<Product>([\.name])

Con esta sola línea, hemos añadido un índice usando un keypath con la propiedad name del modelo. SwiftData se encargará automáticamente de optimizar las consultas relacionadas con esa propiedad.

Creando múltiples índices

Además, es posible agregar múltiples índices o incluso índices compuestos según sea necesario. Por ejemplo:

#Index<Product>(
// 1
[\.name],
// 2
[\.expirationDate],
// 3
[\.name, \.expirationDate]
)

En este ejemplo:

  1. Se crea un índice para la propiedad name.
  2. Se añade otro índice para la propiedad expirationDate.
  3. Finalmente, se define un índice compuesto que considera ambas propiedades: [\.name, \.expirationDate].

Esto es especialmente útil cuando el diseño de nuestro esquema de datos incluye campos que suelen usarse conjuntamente en las consultas. Los índices compuestos permiten mejorar significativamente el rendimiento en estos casos.

Así se ve el código completo:

import SwiftData
@Model
class Product {
#Index<Product>(
[\.name],
[\.expirationDate],
[\.name, \.expirationDate]
)
var name: String
var quantity: Int
var expirationDate: Date
var category: ProductCategory
}

Conclusión

Crear índices es una utilidad fundamental para trabajar con bases de datos, y ahora podemos crearlos en SwiftData gracias a los últimos desarrollos de Apple. Sin embargo, es importante tener cuidado de no abusar de esta herramienta, ya que podríamos afectar el rendimiento de escritura, ocupar más espacio del esperado y complicar el mantenimiento de la base de datos.

Comparte este artículo

Subscríbete a nuestro Newsletter

Mantente al día en el mundo de las aplicaciones móviles con nuestro blog especializado.

Artículos semanales

Todas las semanas artículos nuevos sobre el mundo de las aplicaciones móviles.

No spam

No te enviaremos spam, solo contenido de calidad. Puedes darte de baja cuando quieras.

Contenido de calidad

Nada de contenido generado de manera automática usando ChatGPT.

Recomendaciones

Tips indispensables sobre mejores prácticas y metodologías.

© 2025 AsyncLearn