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

Народ, читаю сейчас про хранение data files index organized tables

и heap organized tables в базах.
загуглил, написано, что в postgres heap organized tables, и если хотите, можно clustered сделать, но делается он на основании индекса.
Вот хочу спросить....
если уже есть индекс, на основании которого кластеризуется таблица, есть ли существенный профит?
т.е по скорости выборки, вроде как...хотя опять же, не факт.
т.е кто-то юзает активно их?
Причем, есть же тема, что можно создать индекс с включением полей необходимых, чтобы Index only scan был...

4 ответов

18 просмотров

в постгресе в clustered таблице записи просто упорядочены по ключу индекса без дальнейшего поддержания порядка. > если уже есть индекс, на основании которого кластеризуется таблица, есть ли существенный профит? профит как и у всех кластеризованных индексов - ниже цена (seq_page_cost вместо random_page_cost) при сканировании нескольких смежных записей по индекс скану

Anatoliy-Burov Автор вопроса
Maksim Milyutin
в постгресе в clustered таблице записи просто упор...

я просто пытаюсь понять, в чем будет разница, если я например создам индекс с включением необходимых полей, которые мне будут нужны в выборке? т.е зачем именно таблицу кластеризовать... Т.е общая суть ясна, упорядочить хранение tuples. но для этого индексы есть. окей...индексы есть, а если данные захотим получить, не обращаясь к таблице? - просто создаём индекс с включением требуемых полей. Т.е я бы понял, если бы таблица кластерилизовывалась без создания вторичного индекса, например. Тогда был бы профит, что можно место сэкономить на диске. А так всеравно отдельно индекс создать надо... Ещё и поддерживать кластеризацию таблицы нужно... Я просто на практике как то не применял кластеризацию таблиц и вот пытаюсь понять, где оно реально применимо, где другие подходы не сработают?) Наверное, где применяются hdd диски и последовательное чтение упорядоченных данных требуется, типа where id between 10 and 500....? Просто в век ssd и nvme, наверно не так важна кластеризация таблиц?

Anatoliy Burov
я просто пытаюсь понять, в чем будет разница, если...

Покрывающие индексы больше по объёму, аффектятся при обновлении покрывающих атрибутов. Потом не всегда index-only scan работает только с индексом - иногда достаётся строка из heap-таблицы для проверки видимости индексного указателя в рамках текущей транзакции, в худшем случае IOS может деградировать в полноценный index scan. А так, да, кластеризованная таблица по предназначению сходна с покрывающим индексом для целевого набора атрибутов в запросе. > Наверное, где применяются hdd диски и последовательное чтение упорядоченных данных требуется, типа where id between 10 and 500....? да, и нагрузка как правило read-only. > Просто в век ssd и nvme, наверно не так важна кластеризация таблиц? разница между последовательным и случайным сканированием всё равно будет. Правда, не такая существенная как у hdd

В MSSQL почти всегда выгодно кластеризовать по PRIMARY KEY (по индексу, который уникальный, недлинный и используется чаще остальных). Доступ по этому индексу станет быстрее, а по остальным столько же. Вторая гипотеза следует из того, что доступ из secondary индекса всегда непрямой. Т.е. heap organized tables в MSSQL они на самом деле тоже index organized по индексу ROWID.

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта