172 похожих чатов

Коллеги, а есть ли способ заставить PG использовать конкретный индекс?

Причем, указать надо именно в SELECT, вещи типа set enable_seqscan=false не подходят.

34 ответов

11 просмотров

нет

Tagg-Steel Автор вопроса
doc
нет

А если пойти таким путем - этот селект запихнуть в функцию и там установить enable_seqscan, а оттуда вернуть результат?

Tagg-Steel Автор вопроса
doc
а что изменится?

В функции этот селект выполнится с использованием индекса, или я что-то не так понимаю?

Tagg Steel
В функции этот селект выполнится с использованием ...

почему он там должен с использованием индекса выполниться?

Tagg-Steel Автор вопроса
doc
почему он там должен с использованием индекса выпо...

Потому что перед выполнением я поставлю переменную set enable_seqscan=false

Tagg Steel
Потому что перед выполнением я поставлю переменную...

так выключение секскана это не заставить использовать конкретный индекс. это просто заставить использовать индексы

Tagg-Steel Автор вопроса
doc
так выключение секскана это не заставить использов...

У меня простой запрос, where identity_id = 45, к примеру. Так как в таблице мало значений, то имеющийся индекс не используется. А надо, чтобы использовался.

Tagg Steel
У меня простой запрос, where identity_id = 45, к п...

Кому надо? Вам? Вы и используйте. Пг не надо.

Tagg Steel
У меня простой запрос, where identity_id = 45, к п...

надо разбираться, почему база принимает такое решение. в вашем случае из-за размеров таблицы выгоднее сделать SS, т.к. он затронет меньше страничек, чем IS на маленьких размерах (1-2 страницы по 8кБ) IS-ы редко используются

Tagg-Steel Автор вопроса
Виктор Егоров
надо разбираться, почему база принимает такое реше...

Это понятно, но я хочу заставить его использовать индекс даже если в таблице 2 строки - чтобы выбрал сразу нужную и не лез бы ко второй.

Tagg Steel
У меня простой запрос, where identity_id = 45, к п...

мало это сколько? если там несколько сотен записей, то индекс не нужен, проще последоватлеьно прочитать.

Tagg Steel
Это понятно, но я хочу заставить его использовать ...

данные хранятся в виде страниц, на которых множество строк записано. если все на одной странице умещается, то в индекс нет смысла лезть

Tagg Steel
Это понятно, но я хочу заставить его использовать ...

вы механику работы IndexScan-а в базе понимаете? база работает с блоком, а раз он уже в кэше, то найти запись – пара лишних циклов то, что вы хотите — это надо лезть в как минимум ещё 2 дополнительных блока. это дороже. вы хотите странного

Tagg-Steel Автор вопроса
doc
мало это сколько? если там несколько сотен записей...

В системе используется защита строк. таблица, о которой я говорю, содержит разрешения на просмотр таблиц, в том числе и самой себя. Для этой таблицы имеется своя policy, которая пропускает стоку если она “текущая”(определяется по переменным сессии), а если не “текущая” - то загружается “текущая” строка и из нее берутся разрешения. Все работает, когда используется индекс - когда записей много, а когда мало - мроисходит, понятное дело, зацикливание.

Tagg Steel
В системе используется защита строк. таблица, о ко...

хм, велосипед? https://www.postgresql.org/docs/current/sql-createpolicy.html

Tagg Steel
В системе используется защита строк. таблица, о ко...

не понял почему происходит зацикливание, вообще ваш кейс звучит оч странно) наличия индекса только на производительность влияет, а не на корректность

Tagg-Steel Автор вопроса

Я про это и задавал вопрос - можно ли селект вынести в функцию и в ней отключить seqscan

Tagg Steel
Я про это и задавал вопрос - можно ли селект вынес...

пробуйте, но знайте, что вы что-то странное делаете и скорее всего некорректное. сейчас работает, завтра нет

Tagg-Steel Автор вопроса
doc
пробуйте, но знайте, что вы что-то странное делает...

Есть еще мысль-сделать то поле, по которому поиск, PRIMARY_KEY. Правильно ли я понимаю, что по PK он выберет всегда одну запись и не будет делать SEQ SCAN ни в каком случае?

Tagg-Steel Автор вопроса
Tagg Steel
В системе используется защита строк. таблица, о ко...

расскажи что за защита строк, которая зависит от способа сканирования?

Tagg Steel
Почему?

я же расписал механику на пальцах — зачем лезть в индекс, если таблица из одного блока? поход в индекс в 3 раза увеличивает работу для таблицы из 1 блока.

Tagg-Steel Автор вопроса
doc
расскажи что за защита строк, которая зависит от с...

Я же написал - ест таблица, в которой есть дескрипторы - некие числа, которые определяют, можно или нет данному юзеру показывать конкретную запись. Потем сравнения этих дескрипторв с колумном в каждой строке таблиц, котрые под защитой строк. Таблиц много, все работает, но также надо, чтобы под этой защитой строк оказалась и сама таблица, где дескрипторы прав.

Tagg Steel
Я же написал - ест таблица, в которой есть дескрип...

а я написал, что вы велосипед изобретаете – этот функционал есть в базе. и дал ссылку на доку

Tagg-Steel Автор вопроса
Виктор Егоров
а я написал, что вы велосипед изобретаете – этот ф...

То, что Вы написали, мы и используем. Я писал - запрос используется в policy

Tagg Steel
Я же написал - ест таблица, в которой есть дескрип...

Как должны провериться права на таблицу, если они лежат в этой таблице?

Tagg Steel
Я же написал - ест таблица, в которой есть дескрип...

ну окей, а почему это при послкдовательном сканировании не работает?

Tagg-Steel Автор вопроса
Tagg-Steel Автор вопроса
Tagg Steel
А что мешает это делать?

Я про саму логику действа. Вы хотите соблюдать права доступа при чтении таблицы, которую нужно прочитать для соблюдения прав доступа

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
7
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта