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

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

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

34 ответов

7 просмотров

нет

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
А что мешает это делать?

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

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

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

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
31
Карта сайта