Значение по умолчанию для настройки сессии sql_seq_scan
Параметр: sql_seq_scan_default
Начиная с Tarantool 3.0 значением по умолчанию для настройки сессии
sql_seq_scan будет false. Чтобы вернуть прежнее поведение по
умолчанию, добавлен новый параметр compat.
Старое поведение: сканирующие запросы SELECT всегда разрешены.
Новое поведение: сканирующие запросы SELECT разрешены только при корректном использовании ключевого слова SEQSCAN.
Обратите внимание, что параметр совместимости sql_seq_scan_default
влияет на сессии только во время инициализации. Это означает, что
значение sql_seq_scan_default следует задавать до выполнения
box.cfg{} или создания новой сессии. Кроме того, новая сессия,
созданная до выполнения box.cfg{}, не будет зависеть от значения
параметра compat.
Примеры задания значения параметра перед выполнением box.cfg{}:
tarantool> require('compat').sql_seq_scan_default = 'new'---...tarantool> box.cfg{log_level = 1}---...tarantool> box.space._session_settings:get{'sql_seq_scan'}---- ['sql_seq_scan', false]...
tarantool> require('compat').sql_seq_scan_default = 'old'---...tarantool> box.cfg{log_level = 1}---...tarantool> box.space._session_settings:get{'sql_seq_scan'}---- ['sql_seq_scan', true]...
Примеры задания значения параметра перед созданием новой сессии после
выполнения box.cfg{}:
tarantool> box.cfg{log_level = 1, listen = 3301}---...tarantool> require('compat').sql_seq_scan_default = 'new'---...tarantool> cn = require('net.box').connect(box.cfg.listen)---...tarantool> cn.space._session_settings:get{'sql_seq_scan'}---- ['sql_seq_scan', false]...tarantool> require('tarantool').compat.sql_seq_scan_default = 'old'---...tarantool> cn = require('net.box').connect(box.cfg.listen)---...tarantool> cn.space._session_settings:get{'sql_seq_scan'}---- ['sql_seq_scan', true]...
На данный момент несовместимых модулей не обнаружено.
Ожидается, что большинство запросов SELECT, не использующих индексы,
завершатся с ошибкой после того, как для настройки сессии sql_seq_scan
будет установлено значение false. Лучший способ избежать этого —
переписать запрос для использования индексов. Чтобы определить,
использует ли SELECT индексы, можно воспользоваться EXPLAIN QUERY PLAN.
Если указано SEARCH TABLE, индекс используется. Если указано SCAN TABLE,
индекс не используется.
Для явного разрешения сканирующих запросов можно использовать ключевое
слово SEQSCAN. Также можно установить значение true для настройки сессии
sql_seq_scan, чтобы разрешить все сканирующие запросы.