powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Пара общих вопросов по БД на примере PostgreSQL.
3 сообщений из 3, страница 1 из 1
Пара общих вопросов по БД на примере PostgreSQL.
    #38723031
Dymytry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый, уважаемые любители баз данных!
Прошу оказать гуманитарную помощь java-программисту.

Теория:

t1. А почему нельзя сделать индекс на основе hashmap? Время доступа уменьшается до константы. Если нет повторяющихся значений ключей - должно работать.
t2. В индексе, который B+tree, есть leaf nodes, ноды с самой большой глубиной где и хранятся данные, эти ноды связанны между собой последовательно. Вопрос: отличается ли считывание следующего значения внутри такой ноды от перехода в другую ноду? То есть важно ли для нас чтобы все значения которые мы ищем попали в одну ноду?
t3. Бывают ли БД, где все данные упорядочены в соотв. со значениями ключей? То есть при считывании некоторого range не надо бегать считывающим устройством по диску.
t4. Индекс хранится на диске. А нельзя его как-то в оперативную память поместить для ускорения?

Практика:

p1. Общий главный вопрос: в каких ситуациях анализатор может предпочесть seq scan индексу?
По моим наблюдениям, есть два варианта:
1. чем больше проход по leaf nodes, который делает запрос, тем больше вероятность того что индекс вообще не будет использован. Такое бывает, например, при неравномерном распределении значений ключей: к примеру много Y и N.
2. если таблица маленькая. например 100 рядов.

Это так? Есть что-то еще?

p2. В integer типе в БД не бывает переполнения?

p3. Могу ли я в PosgreSQL распечатать как выглядит дерево индекса?
...
Рейтинг: 0 / 0
Пара общих вопросов по БД на примере PostgreSQL.
    #38723129
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теория.
1. В целом-то, можно. В PG есть такой тип индекса . На практике нет никакого константного времени, работает он незначительно быстрее B-Tree, правда, создаётся быстрее.
2. В случае Index-only скана может оказаться важным, чтобы все значения попали в одну страницу (единица ввода-вывода в PG). Что до ноды - сомневаюсь. Надеюсь, более сведущие коллеги подскажут.
3. Да. Это т.н. кластеризованные таблицы (или Index-organized в Оракле). В PG есть операция кластеризации, т.е. она единоразово упорядочивает данные в таблицы в соответствии с указанным индексом. После любых модификаций она, соответственно, теряет статус кластеризованной.
4. Всё хранится на диске. Однако, при считывании данные попадают в buffer cache. При условии, что данные часто используются, они будут там жить. То есть, если индекс регулярно используется в запросах, то он и так попадёт в оперативную память.

Практика.
1. Если маленькая - да, индекс, скорее всего, проигнорируется. Проход по листьям - в общем, если по индексу идти дороже (больше I/O), чем seq scan-ом, то будет выбран seq scan. Чаще всего seq-scan выпадает на запросы с низкой селективностью (условно говоря, если нам все равно читать половину таблицы, то дешевле просканить всю, чем скакать от индекса к данным.
2. Бывают
Код: plsql
1.
2.
select 9223372036854775807::integer
ERROR:  integer out of range


3. Для получения однозначного ответа на этот вопрос, придётся покопаться в мануалах. Подождём более сведущих коллег.
Для чего распечатка дерева понадобилась?

Общий совет - оценивай всё происходящее в базе не с точки зрения скорости единичной операции, а с точки зрения скорости ввода-вывода.
...
Рейтинг: 0 / 0
Пара общих вопросов по БД на примере PostgreSQL.
    #38723412
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dymytry А почему нельзя сделать индекс на основе hashmap? Время доступа уменьшается до константы.

не до константы. В память весь он не влезет. А вообще hashmap прекрасно применяются для хэшджоинов например.
t2. В индексе, который B+tree, есть leaf nodes, ноды с самой большой глубиной где и хранятся данные

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


p1. Общий главный вопрос: в каких ситуациях анализатор может предпочесть seq scan индексу?

По цене (cost) запроса. Цена у поиска по индексу одна, у последовательного скана другая (меньшая).
Вычислив итоговую цену запроса оптимизатор выбирает с наименьшим костом.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Пара общих вопросов по БД на примере PostgreSQL.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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