Payload is designed with performance in mind, but its customizability means that there are many ways to configure your app that can impact performance. While Payload provides several features and best practices to help you optimize your app's specific performance needs, these are not currently well surfaced and can be obscure. Now: - A high-level performance doc now exists at `/docs/performance` - There's a new section on performance within the `/docs/queries` doc - There's a new section on performance within the `/docs/hooks` doc - There's a new section on performance within the `/docs/custom-components` doc This PR also: - Restructures and elaborates on the `/docs/queries/pagination` docs - Adds a new `/docs/database/indexing` doc - More --- - To see the specific tasks where the Asana app for GitHub is being used, see below: - https://app.asana.com/0/0/1210743577153856
66 lines
1.8 KiB
Plaintext
66 lines
1.8 KiB
Plaintext
---
|
|
title: Indexes
|
|
label: Indexes
|
|
order: 40
|
|
keywords: database, indexes
|
|
desc: Index fields to produce faster queries.
|
|
---
|
|
|
|
Database indexes are a way to optimize the performance of your database by allowing it to quickly locate and retrieve data. If you have a field that you frequently query or sort by, adding an index to that field can significantly improve the speed of those operations.
|
|
|
|
When your query runs, the database will not scan the entire document to find that one field, but will instead use the index to quickly locate the data.
|
|
|
|
To index a field, set the `index` option to `true` in your field's config:
|
|
|
|
```ts
|
|
import type { CollectionConfig } from 'payload'
|
|
|
|
export MyCollection: CollectionConfig = {
|
|
// ...
|
|
fields: [
|
|
// ...
|
|
{
|
|
name: 'title',
|
|
type: 'text',
|
|
// highlight-start
|
|
index: true,
|
|
// highlight-end
|
|
},
|
|
]
|
|
}
|
|
```
|
|
|
|
<Banner type="info">
|
|
**Note:** The `id`, `createdAt`, and `updatedAt` fields are indexed by
|
|
default.
|
|
</Banner>
|
|
|
|
<Banner type="success">
|
|
**Tip:** If you're using MongoDB, you can use [MongoDB
|
|
Compass](https://www.mongodb.com/products/compass) to visualize and manage
|
|
your indexes.
|
|
</Banner>
|
|
|
|
## Compound Indexes
|
|
|
|
In addition to indexing single fields, you can also create compound indexes that index multiple fields together. This can be useful for optimizing queries that filter or sort by multiple fields.
|
|
|
|
To create a compound index, use the `indexes` option in your [Collection Config](../configuration/collections):
|
|
|
|
```ts
|
|
import type { CollectionConfig } from 'payload'
|
|
|
|
export const MyCollection: CollectionConfig = {
|
|
// ...
|
|
fields: [
|
|
// ...
|
|
],
|
|
indexes: [
|
|
{
|
|
fields: ['title', 'createdAt'],
|
|
unique: true, // Optional, if you want the combination of fields to be unique
|
|
},
|
|
],
|
|
}
|
|
```
|