|
|
|
Пара общих вопросов по БД на примере PostgreSQL.
|
|||
|---|---|---|---|
|
#18+
День добрый, уважаемые любители баз данных! Прошу оказать гуманитарную помощь 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 распечатать как выглядит дерево индекса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 01:53:12 |
|
||
|
Пара общих вопросов по БД на примере PostgreSQL.
|
|||
|---|---|---|---|
|
#18+
Теория. 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. 3. Для получения однозначного ответа на этот вопрос, придётся покопаться в мануалах. Подождём более сведущих коллег. Для чего распечатка дерева понадобилась? Общий совет - оценивай всё происходящее в базе не с точки зрения скорости единичной операции, а с точки зрения скорости ввода-вывода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 09:47:24 |
|
||
|
Пара общих вопросов по БД на примере PostgreSQL.
|
|||
|---|---|---|---|
|
#18+
Dymytry А почему нельзя сделать индекс на основе hashmap? Время доступа уменьшается до константы. не до константы. В память весь он не влезет. А вообще hashmap прекрасно применяются для хэшджоинов например. t2. В индексе, который B+tree, есть leaf nodes, ноды с самой большой глубиной где и хранятся данные Ну все данные там не хранятся, за данными в PG таки приходится лазить уже по ссылке в страницу таблицы. Это только в кластерном индексе или покрывающем индексе там данные хранятся. p1. Общий главный вопрос: в каких ситуациях анализатор может предпочесть seq scan индексу? По цене (cost) запроса. Цена у поиска по индексу одна, у последовательного скана другая (меньшая). Вычислив итоговую цену запроса оптимизатор выбирает с наименьшим костом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 13:09:01 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=124&tid=1998532]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 371ms |

| 0 / 0 |
