В этом разделе описывается индексирование для Cloud Firestore Enterprise Edition. Cloud Firestore Enterprise Edition по умолчанию не создает индексы . Чтобы снизить затраты и повысить производительность базы данных, создайте индексы для наиболее часто используемых запросов.
Индексы оказывают значительное влияние на производительность базы данных. Если для запроса существует индекс, база данных может эффективно возвращать результаты, уменьшая объем данных, которые необходимо сканировать, и сокращая объем работы, необходимой для сортировки результатов. Однако записи в индексе увеличивают затраты на хранение и объем работы, выполняемой при операции записи в индексированные поля.
Определение и структура индекса
Указатель состоит из следующих элементов:
- идентификатор коллекции
- список полей в заданной коллекции
- порядок, восходящий или нисходящий, для каждого поля
Индекс также может включать в себя разреженные или уникальные варианты.
Упорядочение по индексу
Порядок и направление сортировки каждого поля однозначно определяют индекс. Например, следующие индексы являются двумя различными индексами и не взаимозаменяемы:
| Коллекция | Поля |
|---|---|
| города | страна (по возрастанию), население (по убыванию) |
| города | население (в порядке убывания), страна (в порядке возрастания), |
При создании индекса для поддержки запроса включайте поля в том же порядке, что и в вашем запросе.
Плотность индекса
По умолчанию записи индекса хранят данные из всех документов в коллекции. Это называется неразреженным индексом. Запись индекса будет добавлена для документа независимо от того, содержит ли документ какие-либо поля, указанные в индексе. Несуществующие поля рассматриваются как имеющие значение NULL при создании записей индекса. Чтобы изменить это поведение, вы можете определить индекс как разреженный индекс.
Разреженные индексы
Разреженный индекс индексирует только те документы в коллекции, которые содержат значение (включая NULL) хотя бы для одного из индексируемых полей. Разреженный индекс снижает затраты на хранение и может повысить производительность.
Уникальные индексы
Установите параметр уникального индекса, чтобы обеспечить уникальность значений для индексируемых полей. Для индексов по нескольким полям каждая комбинация значений должна быть уникальной во всем индексе. База данных отклоняет любые операции обновления и вставки, которые пытаются создать записи индекса с повторяющимися значениями. Если данные индексируемых полей содержат повторяющиеся значения, и вы пытаетесь создать уникальный индекс, то построение индекса завершится с ошибкой в подробностях операции.
Отсутствующие поля в уникальном индексе
Если вы вставляете документ с отсутствующими полями для уникального индекса, индекс устанавливает null значения для отсутствующих полей. Результирующая запись в индексе должна быть уникальной, иначе операция завершится неудачей.
Например, с помощью этого индекса:
| Коллекция | Индексированные поля | Область запроса |
|---|---|---|
| города | имя (по возрастанию) | Коллекция |
Если добавить документ {"abbreviation": "LA"} в коллекцию, уникальный индекс создаст запись с name , установленным в null . Если затем попытаться добавить документ {"abbreviation": "NYC"} , операция завершится неудачей, поскольку результирующая запись для уникального индекса будет той же самой.
Аналогичное поведение применяется к уникальным индексам с несколькими полями. При создании или обновлении документа отсутствующие индексированные поля устанавливаются в null , и результирующая запись в индексе должна быть уникальной в индексе.
Устранение ошибок при построении индекса
При управлении индексами вы можете столкнуться с ошибками при их создании. Операция индексирования может завершиться неудачей, если база данных обнаружит проблему с данными. Операции индексирования могут завершиться неудачей по следующим причинам:
- Вы достигли лимита индекса. Например, возможно, операция достигла максимального количества записей индекса на документ. Если создание индекса не удалось, вы увидите сообщение об ошибке. Если лимит индекса не достигнут, повторите операцию индексирования.
- Вы задали параметр уникального индекса, и данные индексированных полей создадут повторяющиеся записи в индексе. Для продолжения удалите повторяющиеся комбинации значений из данных.
Что дальше?
Узнайте, как создавать и управлять индексами .