powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выбрать подходящие типы индексов
9 сообщений из 9, страница 1 из 1
Выбрать подходящие типы индексов
    #39342101
Alexander Krasny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такие вопросы:
Есть таблицы:
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) по алфавиту и наоборот.

Вопросы вот такие...
...
Рейтинг: 0 / 0
Выбрать подходящие типы индексов
    #39342108
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 текстовым?

Кроме как первичный и уникальный - индексы делаются под конкретную задачу.
...
Рейтинг: 0 / 0
Выбрать подходящие типы индексов
    #39342124
Alexander Krasny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij, предупреждение о HASH индексах читал, просто так ли оно важно в условиях РЕАЛЬНОЙ жизни БД?

А что Вы имели ввиду "...Например, функциональным индексом."? Мне сложно понять связку независимых предложений: "Не надо использовать hash-индексы без четкого понимания, что ничем другим обойтись не удастся. Например, функциональным индексом."

За подсказку, про уникальный индекс B-tree спасибо, учту.

Про FK подумаю.. Склоняюсь, что FK в таблице 1. сделаю на org_id.
...
Рейтинг: 0 / 0
Выбрать подходящие типы индексов
    #39342130
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Krasny,

смотря что считать "реальной" жизнью.
Я считаю, что нереплицируемая вещь (без чёткой аргументации необходимости в этом) - использоваться не должна. Только ненужная головная боль в обслуживании.

По поводу фразы о функциональных индексов: для чего обычно используется hash-индекс? Для чёткого поиска объёмного объекта, реальное значение не записывается в индекс для экономии объёма индекса. В индекс записывается результат некой hash-функции, затем осуществляется поиск по именно этой функции и перепроверяется реальное значение. Функциональный индекс по some_static_hash_function(column) замечательно с этим справится при использовании любого другого типа индекса. Реальное значение, правда, перепроверять надо уже в запросе.
...
Рейтинг: 0 / 0
Выбрать подходящие типы индексов
    #39342134
Alexander Krasny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij, спасибо за объяснение. По поводу нереплецируемых вещей понял. И по поводу функциональных индексов (их лучше использовать, когда объём данных высок, чтобы искать по хэшу, а не по данным).
Можете привести пример из своей практики работы с индексами, который будет полезен? Или скажем, как наставление что ли =)
...
Рейтинг: 0 / 0
Выбрать подходящие типы индексов
    #39342144
Michael Isaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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/
...
Рейтинг: 0 / 0
Выбрать подходящие типы индексов
    #39342149
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Krasny,

я описал, как можно использовать функциональные индексы в качестве замены довольно плохо реализованному в postgresql нативному hash-индексу. Но этим их возможности не ограничивается. Например, функциональный индекс по btree может быть уникальным.
Уникальный btree(organization_name) позволит существовать ООО Вектор, ооо Вектор и ООО вектор одновременно, т.к. сравнение регистрозависимое. Уникальный по btree(lower(organization_name)) - только какому-то одному варианту.
И индекс можно строить по любой функции, объявленной как immutable - в том числе по объявленной пользователем, а не только по штатным функциям.

Пример из практики или наставление - не знаю, на какую тему. Вкратце: дерзайте и не бойтесь использовать функционал СУБД.
...
Рейтинг: 0 / 0
Выбрать подходящие типы индексов
    #39342773
Alexander Krasny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Michael Isaev, спасибо, сейчас сделаю и протестирую время выполнения запросов с и без индексов
...
Рейтинг: 0 / 0
Выбрать подходящие типы индексов
    #39342775
Alexander Krasny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij, я как раз, прочитав пару статей про индексы делаю сравнения по времени выполнения запросов с индексами и без.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выбрать подходящие типы индексов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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