Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Выбрать подходящие типы индексов
|
|||
|---|---|---|---|
|
#18+
Вот такие вопросы: Есть таблицы: 1). (empl_id, name, organization_name) ; 2). (org_id, organization_name) . empl_id, org_id - целочисленные уникальные name, organization_name, organization_name - строковые, не null В таблице 1. organization_name - внешний ключ или ссылочное поле. Объёмы табл. 1. = 1 000 000. Объёмы табл. 2. = 50 000. Какие индексы стоит сделать? Я подумал, что для empl_id можно сделать HASH индекс, так как он только с оператором (=), а запросы к рабочему по его табельному номеру будут частыми. Далее я я начал читать про типы индексов (оф. документация) + Статья . Не знаю верно ли я понял, но в моём случае не нужны точно индексы Gist, SP-Gist, так как они заточены под особые типы данных (у меня то обычный строковый и целочисленный). Поэтому остались GIN, B-tree (default), BRIN. Мне сложно выбрать, поэтому прошу помощи. P.S. Хотелось бы повесить индекс на ссылочное поле и сделать составной индекс на (empl_id, name) по алфавиту и наоборот. Вопросы вот такие... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2016, 14:24 |
|
||
|
Выбрать подходящие типы индексов
|
|||
|---|---|---|---|
|
#18+
https://www.postgresql.org/docs/9.5/static/indexes-types.html manualHash index operations are not presently WAL-logged, so hash indexes might need to be rebuilt with REINDEX after a database crash if there were unwritten changes. Also, changes to hash indexes are not replicated over streaming or file-based replication after the initial base backup, so they give wrong answers to queries that subsequently use them. For these reasons, hash index use is presently discouraged. Не надо использовать hash-индексы без четкого понимания, что ничем другим обойтись не удастся. Например, функциональным индексом. Уникальным сейчас может быть только B-tree. FK может ссылаться только на поля с уникальным ограничением. авторorganization_name - внешний ключ или ссылочное поле. Судя по названию - это что-то текстовое? Вы хорошо подумали делать FK текстовым? Кроме как первичный и уникальный - индексы делаются под конкретную задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2016, 14:57 |
|
||
|
Выбрать подходящие типы индексов
|
|||
|---|---|---|---|
|
#18+
Melkij, предупреждение о HASH индексах читал, просто так ли оно важно в условиях РЕАЛЬНОЙ жизни БД? А что Вы имели ввиду "...Например, функциональным индексом."? Мне сложно понять связку независимых предложений: "Не надо использовать hash-индексы без четкого понимания, что ничем другим обойтись не удастся. Например, функциональным индексом." За подсказку, про уникальный индекс B-tree спасибо, учту. Про FK подумаю.. Склоняюсь, что FK в таблице 1. сделаю на org_id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2016, 16:01 |
|
||
|
Выбрать подходящие типы индексов
|
|||
|---|---|---|---|
|
#18+
Alexander Krasny, смотря что считать "реальной" жизнью. Я считаю, что нереплицируемая вещь (без чёткой аргументации необходимости в этом) - использоваться не должна. Только ненужная головная боль в обслуживании. По поводу фразы о функциональных индексов: для чего обычно используется hash-индекс? Для чёткого поиска объёмного объекта, реальное значение не записывается в индекс для экономии объёма индекса. В индекс записывается результат некой hash-функции, затем осуществляется поиск по именно этой функции и перепроверяется реальное значение. Функциональный индекс по some_static_hash_function(column) замечательно с этим справится при использовании любого другого типа индекса. Реальное значение, правда, перепроверять надо уже в запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2016, 16:17 |
|
||
|
Выбрать подходящие типы индексов
|
|||
|---|---|---|---|
|
#18+
Melkij, спасибо за объяснение. По поводу нереплецируемых вещей понял. И по поводу функциональных индексов (их лучше использовать, когда объём данных высок, чтобы искать по хэшу, а не по данным). Можете привести пример из своей практики работы с индексами, который будет полезен? Или скажем, как наставление что ли =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2016, 16:28 |
|
||
|
Выбрать подходящие типы индексов
|
|||
|---|---|---|---|
|
#18+
Alexander Krasny, задача для первой недели изучения БД: тебе уже объяснили, что твои таблицы имеют неправильную структуру. правильная должна быть. 1). employee (empl_id(pk), name, org_id(fk)); 2). organizations (org_id(pk), organization_name). Соответственно: 1) таблица organizations имеет уникальный b-tree индекс для первичного ключа по полю org_id 2) таблица employee имеет уникальный b-tree индекс для первичного ключа по полю empl_id 3) таблица employee имеет неуникальный b-tree индекс для внешнего ключа по полю org_id, ссылающегося на первичный ключ таблицы organizations hash индексы нужны в случае соединения таблиц по нескольким полям, по значению, получаемому hash-функцией образовывайся https://habrahabr.ru/post/102785/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2016, 17:25 |
|
||
|
Выбрать подходящие типы индексов
|
|||
|---|---|---|---|
|
#18+
Alexander Krasny, я описал, как можно использовать функциональные индексы в качестве замены довольно плохо реализованному в postgresql нативному hash-индексу. Но этим их возможности не ограничивается. Например, функциональный индекс по btree может быть уникальным. Уникальный btree(organization_name) позволит существовать ООО Вектор, ооо Вектор и ООО вектор одновременно, т.к. сравнение регистрозависимое. Уникальный по btree(lower(organization_name)) - только какому-то одному варианту. И индекс можно строить по любой функции, объявленной как immutable - в том числе по объявленной пользователем, а не только по штатным функциям. Пример из практики или наставление - не знаю, на какую тему. Вкратце: дерзайте и не бойтесь использовать функционал СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2016, 17:41 |
|
||
|
Выбрать подходящие типы индексов
|
|||
|---|---|---|---|
|
#18+
Michael Isaev, спасибо, сейчас сделаю и протестирую время выполнения запросов с и без индексов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2016, 16:39 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39342134&tid=1996899]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 141ms |

| 0 / 0 |
