---
metadata:
  - name: generator
    content: Diplodoc Platform v5.57.4
alternate:
  - https://ydb.tech/docs/en/yql/reference/syntax/select/vector_index.md?version=main
  - https://ydb.tech/docs/ru/yql/reference/syntax/select/vector_index.md?version=main
  - href: https://ydb.tech/docs/ru/yql/reference/syntax/select/vector_index.md?version=main
    type: text/markdown
    title: Markdown version
  - href: https://ydb.tech/docs/ru/llms.txt
    rel: describedby
sourcePath: ru/core/yql/reference/syntax/select/vector_index.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# VIEW (Векторный индекс)

Для выполнения запроса `SELECT` с использованием [векторного индекса](https://ydb.tech/docs/ru/dev/vector-indexes.md?version=main) в строчно-ориентированной таблице используйте следующий синтаксис:

```yql
PRAGMA ydb.KMeansTreeSearchTopSize = "10";

SELECT ...
    FROM TableName VIEW IndexName
    WHERE ...
    ORDER BY Knn::DistanceFunction(...)
    LIMIT ...
```

```yql
PRAGMA ydb.KMeansTreeSearchTopSize = "10";

SELECT ...
    FROM TableName VIEW IndexName
    WHERE ...
    ORDER BY Knn::SimilarityFunction(...) DESC
    LIMIT ...
```

Принципы работы и настройки векторного индекса подробно описаны в отдельной статье [Векторные индексы](https://ydb.tech/docs/ru/dev/vector-indexes.md?version=main).

{% note info %}

Векторный индекс поддерживает функцию расстояния или сходства [расширения Knn](https://ydb.tech/docs/ru/yql/reference/udf/list/knn.md?version=main#functions-distance), выбранную при создании индекса.

Векторный индекс не будет автоматически выбран [оптимизатором](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#optimizer), поэтому его нужно указывать явно с помощью выражения `VIEW IndexName`.

Если не использовать выражение `VIEW`, запрос выполнит полное сканирование таблицы с попарным сравнением векторов. Рекомендуется проверять оптимальность написанного запроса, используя [анализ плана выполнения запроса](https://ydb.tech/docs/ru/dev/optimization/plans.md?version=main). В частности, следует следить за отсутствием полного сканирования (full scan) основной таблицы.

{% endnote %}

{% note warning %}

<!-- source: ru/_includes/vector-index-update-limitations.md -->
При накоплении значительного объёма изменений в таблицах с векторным индексом полнота или производительность поиска может ухудшиться. Подробности смотрите в разделе [Обновление векторных индексов](https://ydb.tech/docs/ru/dev/vector-indexes.md?version=main#update).
<!-- endsource: ru/_includes/vector-index-update-limitations.md -->

{% endnote %}

## KMeansTreeSearchTopSize {#KMeansTreeSearchTopSize}

Векторный поиск по индексу основан на приближённом алгоритме (ANN, Approximate Nearest Neighbors). Это значит, что результат поиска по векторному индексу может отличаться от результата поиска при полном сканировании таблицы.

Полнота поиска по индексу может быть отрегулирована параметром: `PRAGMA ydb.KMeansTreeSearchTopSize`.

Данный параметр задаёт максимальное число сканируемых кластеров, ближайших к запрашиваемому вектору, на каждом уровне дерева поиска.

Необходимо явно задавать значение данного параметра для каждого запроса.

Значение по умолчанию - 1. То есть, по умолчанию сканируется только 1 ближайший кластер на каждом уровне дерева поиска. Такое значение даёт максимальную производительность поиска, но минимальную возможную полноту. Для увеличения полноты поиска (ценой некоторого замедления) следует увеличить значение PRAGMA, например:

```yql
PRAGMA ydb.KMeansTreeSearchTopSize="10";

SELECT *
    FROM TableName VIEW IndexName
    ORDER BY Knn::CosineDistance(embedding, $target)
    LIMIT 10
```

## Примеры

* Выбор всех полей из таблицы `series` с использованием векторного индекса `views_index`, созданного для `embedding` с мерой близости "косинусное расстояние":

  ```yql
  PRAGMA ydb.KMeansTreeSearchTopSize="10";
  SELECT series_id, title, info, release_date, views, uploaded_user_id, Knn::CosineSimilarity(embedding, $target) as similarity
      FROM series VIEW views_index
      ORDER BY similarity DESC
      LIMIT 10
  ```

* Выбор всех полей из таблицы `series` с использованием векторного индекса с фильтрацией `views_filtered_index`, созданного для `embedding` с мерой близости "косинусное расстояние" и с ускорением фильтрации по колонке `release_date`:

  ```yql
  PRAGMA ydb.KMeansTreeSearchTopSize="10";
  SELECT series_id, title, info, release_date, views, uploaded_user_id, Knn::CosineSimilarity(embedding, $target) as similarity
      FROM series VIEW views_filtered_index
      WHERE release_date = "2025-03-31"
      ORDER BY similarity DESC
      LIMIT 10
  ```
