powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / увеличение производительности разделением таблицы
13 сообщений из 13, страница 1 из 1
увеличение производительности разделением таблицы
    #33616893
DeWiL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите советом.

Допустим есть некая таблица.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE i (
    id SERIAL PRIMARY KEY NOT NULL,
    file_name TEXT,
    count_download INT DEFAULT  0 ,
    file_size INT DEFAULT  0 ,
    md5 TEXT DEFAULT crypt(random(),gen_salt('md5'))
    ...
);

В селектах используются только первые два поля, т.е. id и file_name
Таблица еще имеет достаточно большое количество полей с разными атрибутами, которые используются редко, но нужны для каждой записи.

Теперь вопрос. Если разделить записи на две таблицы.
В первой храним только первые два поля, которые используются для частых селектов, во-второй, все остальное с привязкой по id на первую таблицу.

Даст ли такой метод уменьшение времени для селектов?
Что еще можете посоветовать?

Попробовал использовать Inheritance, это только увеличило время, за счет обращения к таблице-наследнику.

Или для PG вообще не важно, сколько полей имеет таблица?

Конечная цель, получить наименьшее время при селектах для первых двух полей.
...
Рейтинг: 0 / 0
увеличение производительности разделением таблицы
    #33618300
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А запросы-то какие? (примерчик плиз) Ведь в разных ситуациях по разному.
Но если записи апдейтятся редко, и запрос использует индекс, то, думаю, в одной таблице много лучше.
...
Рейтинг: 0 / 0
увеличение производительности разделением таблицы
    #33618463
Hordi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я думаю - наоборот. Если постоянно извлекается пару основных полей, то постгрес вполне может закешировать всю таблицу, в случае же если таблица большая - в кеш попадет только часть...
Лучше всего тест написать и проверить.
...
Рейтинг: 0 / 0
увеличение производительности разделением таблицы
    #33618722
DeWiL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запрос выглядит примерно так


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
...
FOR row IN
        SELECT id,group_id,count_ch,name
        FROM 01_obj
        WHERE id IN
            (SELECT obj_id FROM 01_file WHERE
                show = 't' AND
                type_id IN (SELECT id FROM type_xml('01',_type)))
        AND group_id IN (SELECT id FROM group_xml('01',_group))
        ORDER BY id
        OFFSET _page * _elements - _elements
        LIMIT _elements
LOOP
...

таблица имеет до 10000 записей.

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

добавлю к первоначальному своему вопросу следующее:
есть поля которые селектятся все время.
есть которые почти не селектятся.
есть которые апдейтятся.
исходя из этого думаю разделить их на 3 таблицы соответсвенно.
...
Рейтинг: 0 / 0
увеличение производительности разделением таблицы
    #33619343
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HordiА я думаю - наоборот. Если постоянно извлекается пару основных полей, то постгрес вполне может закешировать всю таблицу, в случае же если таблица большая - в кеш попадет только часть...
Лучше всего тест написать и проверить.

Если извлекаемые данные целиком содержатся в индексе,
то Oracle (и IMHO MS SQL) способен не лазить в саму
таблицу вообще. Если PostgreSQL ведет себя так же,
то задача сводится к правильному выбору индексов
над таблицей, т.е. м.б. полезно включить в индекс поле,
которое выбирают, но которое не используется для поиска.

Не совсем понятно, почему автор решил скрыть от общественности,
какие индексы помимо primary key использованы. Именно это
и представляет наибольший интерес.

Если честно, проблема кажется надуманной:
поиск записи по индексу должен очень слабо зависеть от
колонок, которые не входят в индекс.
...
Рейтинг: 0 / 0
увеличение производительности разделением таблицы
    #33619596
Hordi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ilejn:

Поддерживаю. При поиске по индексу разница при выборке из полной таблицы или усеченной - копейки... Но протестить конкретную реализацию не помешало бы.
...
Рейтинг: 0 / 0
увеличение производительности разделением таблицы
    #33621003
DeWiL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про индексы "ничего не сказал" без злого умыслу :)
Индекс используется обычный на поле file_name типа btree.

Хорошо, если при селектах нет существенной разницы одна или две таблицы, и он все что надо берет в индексах.
А если в строке есть поле счетчика которое часто меняется? Не приводит это к разбуханию таблицы и лишним тормозам на автовакуме?
...
Рейтинг: 0 / 0
увеличение производительности разделением таблицы
    #33621271
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeWiL
А если в строке есть поле счетчика которое часто меняется? Не приводит это к разбуханию таблицы и лишним тормозам на автовакуме?

Если размер счетчика не изменяется (он ведь у тебя не VARHCAR, правда?)
и по нему нет индекса, то, исходя изо всех возможных рациональных соображений, описанных проблем быть не должно. PostgreSQL и рациональные соображения крайне редко входят в противоречия друг с другом.
...
Рейтинг: 0 / 0
увеличение производительности разделением таблицы
    #33621447
> таблица имеет до 10000 записей

Смешной объем. Не парьтесь. Была бы табличка на три порядка больше - можно было бы думать об оптимизации.
...
Рейтинг: 0 / 0
увеличение производительности разделением таблицы
    #33622275
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeWiLзапрос выглядит примерно так ... думаю, что еще над самим селектом можно поработать, оптимизировать.Наверное сначала надо попытаться оптимизировать запрос - это может дать гораздо большую пользу, чем разделение таблицы. Киньте explain analyze запроса, который вы привели.

ilejnЕсли извлекаемые данные целиком содержатся в индексе,
то Oracle (и IMHO MS SQL) способен не лазить в саму
таблицу вообще. Если PostgreSQL ведет себя так же,Постгрес ведет себя иначе - все равно заглядывает в таблицу. Это объясняется используемой транзакционной моделью, досконально обяснить не могу, потому что не уверен в собственном понимании.
...
Рейтинг: 0 / 0
увеличение производительности разделением таблицы
    #33622731
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilejnЕсли размер счетчика не изменяется (он ведь у тебя не VARHCAR, правда?)
и по нему нет индекса

Зато есть другие индексы, и они то и будут расти при каждом апдейте счетчика

ilejnPostgreSQL и рациональные соображения крайне редко входят в противоречия друг с другом.
Здесь ты не совсем права: у тебя свои рац. соображения, у создателей Postgres - свои. Если понять их рац. соображения, то начинаешь восхищаться, если цепляешься за собственные - иногда плеваться хочеться. PostgreSQL особенный продукт (как в прочем и остальные) и его надо принимать.
Код: plaintext
1.
2.
3.
4.
5.
select $SONG$
Осень жизни, как и осень года,
Надо благодарно принимать...
Надо благодарно принимать...
$SONG$;
...
Рейтинг: 0 / 0
увеличение производительности разделением таблицы
    #33624322
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зато есть другие индексы, и они то и будут расти при каждом апдейте счетчика


Поясни, пожалуйста. У нас есть таблица с полями f1 и f2. По полю f1 есть
индекс, по полю f2 его нет. Мы выполняем UPDATE полей f2 и в результате
этого будет расти индекс по f1. Я тебя правильно понял?


Здесь ты не совсем права: у тебя свои рац. соображения, у создателей Postgres - свои. Если понять их рац. соображения, то начинаешь восхищаться, если цепляешься за собственные - иногда плеваться хочеться. PostgreSQL особенный продукт (как в прочем и остальные) и его надо принимать.


Я не очень хочу вступать в философскую дискуссию, но не могу
не отметить твою неправильную трактовку моей половой принадлежности.
...
Рейтинг: 0 / 0
увеличение производительности разделением таблицы
    #33626738
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За неправильную трактовку сразу извиняюсь. Помню как-то давно принял девушку за парня ;-) и начал рассказывать о своих взглядах на девушек.
ilejnПоясни, пожалуйста. У нас есть таблица с полями f1 и f2. По полю f1 есть
индекс, по полю f2 его нет. Мы выполняем UPDATE полей f2 и в результате
этого будет расти индекс по f1. Я тебя правильно понял?
Абсолютно. Для индексов в PostgreSQL (насколко я понимаю в данный момент) не существует операции "delete", в том числе и как составной части update. Каждый update для индекса - это всего лишь вставка новой строки. А удаление старых строк происходит только во время VACUUM.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / увеличение производительности разделением таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]