Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

index_object:select()

object index_object

index_object:select(search-key, options)

Поиск кортежа или набора кортежей по текущему индексу. Для поиска по первичному индексу в указанном спейсе используйте метод box_space-select.

Параметры:

  • index_object (index_object) — ссылка на объект.

  • key (scalar/table) — значение для сопоставления с ключом индекса, который может быть составным.

  • options (table/nil) — ни один, любой или все из следующих параметров:

  • iterator — тип итератора. По умолчанию используется тип 'EQ'.

  • limit — максимальное количество кортежей.

  • offset — количество пропускаемых кортежей (используйте этот параметр с осторожностью при сканировании больших наборов данных.

  • options.after — кортеж или позиция кортежа (tuple_pos), после которого select начинает поиск. Чтобы начать поиск с первого кортежа, передайте этому параметру пустую строку или box.NULL.

  • options.fetch_pos – если true, метод select возвращает позицию последнего выбранного кортежа в качестве второго значения.

Возвращает

none

Эта функция может возвращать одно или два значения:

  • Кортежи, поля которых равны полям переданного ключа. Если количество переданных полей меньше количества полей в текущем ключе, то сравниваются только переданные поля, поэтому select{1,2} соответствует кортежу, первичный ключ которого – {1,2,3}.
  • (Опционально) Если для options.fetch_pos задано значение true, возвращает строку в кодировке base64, представляющую позицию последнего выбранного кортежа, в качестве второго значения. Если кортежи не получены, возвращает nil.

Тип возвращаемого значения

none

  • массив кортежей
  • строка (опционально)

{#offset-warning}

Используйте параметр offset с осторожностью при сканировании больших наборов данных, так как он линейно увеличивает количество сканируемых кортежей и приводит к полному сканированию спейса. Вместо этого можно использовать параметры after и fetch_pos.

Примеры:

Ниже приведено несколько примеров использования select с различными параметрами. Чтобы попробовать эти примеры, необходимо выполнить начальную загрузку базы данных Tarantool, как описано в Использование операций с данными.

-- Insert test data --box.space.bands:insert { 1, 'Roxette', 1986 }box.space.bands:insert { 2, 'Scorpions', 1965 }box.space.bands:insert { 3, 'Ace of Base', 1987 }box.space.bands:insert { 4, 'The Beatles', 1960 }box.space.bands:insert { 5, 'Pink Floyd', 1965 }box.space.bands:insert { 6, 'The Rolling Stones', 1962 }box.space.bands:insert { 7, 'The Doors', 1965 }box.space.bands:insert { 8, 'Nirvana', 1987 }box.space.bands:insert { 9, 'Led Zeppelin', 1968 }box.space.bands:insert { 10, 'Queen', 1970 }-- Select a tuple by the specified primary key value --select_primary = bands.index.primary:select { 1 }--[[---- - [1, 'Roxette', 1986]...--]]-- Select a tuple by the specified secondary key value --select_secondary = bands.index.band:select { 'The Doors' }--[[---- - [7, 'The Doors', 1965]...--]]-- Select a tuple by the specified multi-part secondary key value --select_multipart = bands.index.year_band:select { 1960, 'The Beatles' }--[[---- - [4, 'The Beatles', 1960]...--]]-- Select tuples by the specified partial key value --select_multipart_partial = bands.index.year_band:select { 1965 }--[[---- - [5, 'Pink Floyd', 1965]  - [2, 'Scorpions', 1965]  - [7, 'The Doors', 1965]...--]]-- Select maximum 3 tuples by the specified secondary index --select_limit = bands.index.band:select({}, { limit = 3 })--[[---- - [3, 'Ace of Base', 1987]  - [9, 'Led Zeppelin', 1968]  - [8, 'Nirvana', 1987]...--]]-- Select maximum 3 tuples with the key value greater than 1965 --select_greater = bands.index.year:select({ 1965 }, { iterator = 'GT', limit = 3 })--[[---- - [9, 'Led Zeppelin', 1968]  - [10, 'Queen', 1970]  - [1, 'Roxette', 1986]...--]]-- Select maximum 3 tuples after the specified tuple --select_after_tuple = bands.index.primary:select({}, { after = { 4, 'The Beatles', 1960 }, limit = 3 })--[[---- - [5, 'Pink Floyd', 1965]  - [6, 'The Rolling Stones', 1962]  - [7, 'The Doors', 1965]...--]]-- Select first 3 tuples and fetch a last tuple's position --result, position = bands.index.primary:select({}, { limit = 3, fetch_pos = true })-- Then, pass this position as the 'after' parameter --select_after_position = bands.index.primary:select({}, { limit = 3, after = position })--[[---- - [4, 'The Beatles', 1960]  - [5, 'Pink Floyd', 1965]  - [6, 'The Rolling Stones', 1962]...--]]