space_object:select()
-
object
space_object
-
space_object:
select
([key[, options]]) Поиск кортежа или набора кортежей в заданном спейсе. Этот метод не передает управление (детали можно найти в разделе Кооперативная многозадачность).
Параметры: - space_object (space_object) – ссылка на объект
- key (scalar/table) – значение должно совпасть с индексным ключом, который может быть составным.
- options (table/nil) – ни один, любой или все параметры, которые допускает index_object:select(): *
options.iterator
(тип итератора) *options.limit
(максимальное количество кортежей) *options.offset
(количество пропускаемых кортежей)
возвращает: кортежи, поля первичного ключа в которых равны полям переданного ключа. Если количество переданных полей меньшей количества полей первичного ключа, сопоставляются только переданные поля, то есть для
select{1,2}
совпадением будет кортеж с первичным ключом{1,2,3}
.тип возвращаемого значения: массив кортежей
Запрос выборки
select
также можно выполнить со специальными параметрами индекса, которые указаны в index_object:select().Возможные ошибки:
- нет такого спейса;
- неверный тип.
Факторы сложности: Размер индекса, тип индекса
Пример:
tarantool> s = box.schema.space.create('tmp', {temporary=true}) --- ... tarantool> s:create_index('primary',{parts = { {field = 1, type = 'unsigned'}, {field = 2, type = 'string'}} }) --- ... tarantool> s:insert{1,'A'} --- - [1, 'A'] ... tarantool> s:insert{1,'B'} --- - [1, 'B'] ... tarantool> s:insert{1,'C'} --- - [1, 'C'] ... tarantool> s:insert{2,'D'} --- - [2, 'D'] ... tarantool> -- необходимо совпадение с двумя полями первичного ключа tarantool> s:select{1,'B'} --- - - [1, 'B'] ... tarantool> -- необходимо совпадение только одного поля первичного ключа tarantool> s:select{1} --- - - [1, 'A'] - [1, 'B'] - [1, 'C'] ... tarantool> -- необходимо совпадение с 0 полей, поэтому возвращает все кортежи tarantool> s:select{} --- - - [1, 'A'] - [1, 'B'] - [1, 'C'] - [2, 'D'] ... tarantool> -- первое поле должно быть больше 0, tarantool> -- пропуск первого кортежа и возврат до tarantool> -- 2 кортежей. Все параметры в данном примере tarantool> -- зависят от характеристик индекса, поэтому см. tarantool> -- более подробное описание в index_object:select(). tarantool> s:select({0},{iterator='GT',offset=1,limit=2}) --- - - [1, 'B'] - [1, 'C'] ...
Как показано в последнем запросе вышеприведенного примера, чтобы выполнять сложные запросы выборки
select
, где можно указать, в каком индексе производится поиск и с какими условиями (например, «больше, чем» вместо «равный»), а также необходимое количество возвращаемых кортежей, необходимо ознакомиться с index_object:select().Помните, что из кортежа можно получить поле как по номеру поля, так и по имени поля, что более удобно. См. пример: использование имен вместо номеров полей.
Для получения дополнительной информации о сценариях использования и типичных ошибках, см. Пример: использование операций с данными далее в разделе.
-