powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Целесообразность создания композитных индексов
31 сообщений из 31, показаны все 2 страниц
Целесообразность создания композитных индексов
    #38906625
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеет ли смысл создавать композитные индексы по набору полей, если для каждого поля по отдельности уже есть индекс (например, это внешние ключи)? Если да, то в каких случаях?
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38906635
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloper,

есть если отбор часто идёт по сразу по всем полям входящих в композитный индекс. И естественно если селективность такого отбора высока.

Существенный выигрыш можно получить на таблицах которые обеспечивают связь N:M, особенно если на оба поля наложено ограничение уникальности (при этом индекс естественно становится уникальным)
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38906760
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Interloper!
You wrote on 17 марта 2015 г. 10:50:30:

Interloper> Имеет ли смысл создавать композитные индексы по набору полей, если для
> каждого поля по отдельности уже есть индекс (например, это внешние
> ключи)? Если да, то в каких случаях?
в общем случае смысла не имеет.
в частных случаях, при ОСОЗНАННОМ применении имеет право жить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38906861
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloper, композитный индекс, в лучшем случае, может заменить только индекс по первому столбцу. Отдельные индексы по следующим столбцам все равно придется создавать. Так что избыточность индексов невелика получается))
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38906883
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloperв каких случаях?
Если тщательно изучил http://ibase.ru/devinfo/dataaccesspaths.htm
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907034
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chInterloper, композитный индекс, в лучшем случае, может заменить только индекс по первому столбцу . Отдельные индексы по следующим столбцам все равно придется создавать. Так что избыточность индексов невелика получается))
И как получаются выводы такие???
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907036
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chкомпозитный индекс, в лучшем случае, может заменить только индекс по первому столбцу.Земляк, ты бредишь.
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907112
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky, что не так?
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907142
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Fd00ch!
You wrote on 17 марта 2015 г. 14:18:53:

Fd00chчто не так?всё не так.

индекс по полям (f1, f2, f3, f4)

условие отбора (f1, f2, f3) - индекс используется для всех трёх полей

условие отбора (f1, f2, f4) - индекс используется
только для f1 и f2.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907155
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий, отбор по f2+f3+f4 или по f3+f4 или по f4- индекс идет лесом
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907161
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Fd00ch!
You wrote on 17 марта 2015 г. 14:35:03:

Fd00chотбор по f2+f3+f4 или по f3+f4 или по f4- индекс идет
лесоместессссно
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907163
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chотбор по f2+f3+f4 или по f3+f4 или по f4- индекс идет лесом
Мимопроходящийпри ОСОЗНАННОМ применении имеет право жить.
создание композита и не использование в отборе первого сегмента относится скорее к термину "ССЗБ", а не "ОСОЗНАННОМ".
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907199
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky, для развития темы: а есть какие-то среднепотолочные данные, на сколько % композит по 2-3 полям может обгнать отдельные индексы?

зы. я при осознанном осмыслении для себя решил, что бОльшая польза будет от частичных индексов и "партиционировании" таблиц. пичалька, что птичка такому не научится никогда
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907207
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00ch,

с чего это ты взял?

Firebird release strategy and roadmap for 2015/2016 Firebird 4.0 planning

Feature list (cont'd)

External database links, heterogenous queries
Bi-directional index navigation
Batch API operations
Implicit transactions
New data access paths, subquery transformations
Query timeouts
Partial indices
Shared metadata cache

планы конечно предварительные, но когда нибудь будет
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907214
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, "через 3 года" и "никогда" - для меня синонимы))
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907220
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00ch> есть какие-то среднепотолочные данные, на сколько
fd00ch> % композит по 2-3 полям может обгнать отдельные индексы?

Это даже не среднепотолочные, а насколько средняя температура
в травматологии выше средней температуры в реанимации.
В определенных случаях будет выше, в определенных - ниже, в
третьих зависит от и т.д. Впрочем, щас Таблоид придёт, намеряет
тебе по самые не балуй.

P.S. Сегодня, возможно, не мой день, но лично я никакой связи
между "частичными индексами" и "партиционированием таблиц"
не вижу, совсем никакой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907233
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийиндекс по полям (f1, f2, f3, f4)
условие отбора (f1, f2, f3) - индекс используется для всех трёх полей
поскольку в композитном индексе ключи второго и далее столбцов сгруппированы относительно предыдущего, полноценно композитный индекс будет использоваться только в случае

where f1 = x and f2 = y and f3 ...

для f3 может быт >, <, =.

Иначе, например, если
where f1 > x and f2 = y and f3 ...

то затраты на такой поиск будут эквивалентны поиску по одиночному индексу по f1.

InterloperИмеет ли смысл создавать композитные индексы по набору полей, если для каждого поля по отдельности уже есть индекс
не имеет. исключение - если ты для ORDER BY F1, F2, F3 хочешь получить в плане использование индекса, а не сортировку, то тогда придется создать индекс по F1+F2+F3. Но выгода выборки в порядке индекса есть только на малых объемах выборок. Большой объем выборки при таком плане приведет к адскому объему ввода-вывода (страниц с диска).
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907260
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvИначе, например, если
where f1 > x and f2 = y and f3 ...

то затраты на такой поиск будут эквивалентны поиску по одиночному индексу по f1.
затраты для композита будут больше
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907278
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> то затраты на такой поиск будут эквивалентны поиску по одиночному индексу по f1.

Нет, дороже выйдет, в зависимости от веса композита.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907398
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrзатраты для композита будут больше
да, я не то написал. имел в виду, что "процедурно" сервер будет использовать только первый сегмент индекса. А затраты конечно будут выше, т.к. композитный индекс "жирнее".
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907789
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть выборки вида "where f1 = x and f2 = y", насколько создание композитного индекса по этим полям ускорит выполнение запросов в сравнении с двумя отдельными индексами по столбцам f1 и f2?
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38907799
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloperнасколько создание композитного индекса по этим полям ускорит выполнение запросов в сравнении с двумя отдельными индексами по столбцам f1 и f2?создать табличку на пару колонок и десяток миллионов записей дело нескольких минут, загнал запрос и проверил.
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38908132
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

Меня интересует мнение сообщества. Я предполагаю, что заметного выигрыша не будет.
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38908140
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperМеня интересует мнение сообщества.
Мнение сообщества не имеет значения в свете информации, приведённой по данной мною выше
ссылке. Движку на это мнение глубоко наплевать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38908189
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloper,

Выигрыш будет только если будут задействованы все сегменты индекса, иначе индекс по отдельному полю выиграет.
Какой будет выигрыш хз. Мерить надо, может быть 10-20%, а может и не быть. Мало это или много решать разработчику.
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38910012
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperМеня интересует мнение сообщества
При чем тут мнение сообщества. Тут важно конкретно твоё понимание.

Объясню на пальцах. При чем все это относится к любой базе, не только Firebird, включая допотопные и будущие. У тебя есть 3 варианта:

1. Таблица маленькая (какой нибудь короткий справочник в 5-10-20 записей). Тут индексы вообще не нужны никакие (ну кроме ПК для удобства использования уникальности записи). Быстрее записи перебрать чем подобрать индекс, поднять его в память и использовать.

2. Если в поле f1 одинаковые значения, то без индекса по двум полям (f1,f2) а только с индексом по f1 запрос с условием f1=:x and f2=:y будет равносилен (в лучшем случае) полному перебору всех записей без использования индекса. В этом случае индекс с двумя ключами (f1,f2) нужно делать обязательно (если, конечно, в f2 все значения не одинаковые, тогда просто условие делать не надо).
То же самое касается случаев, когда в f1 "много" одинаковых значений. Например, в таблице 500млн записей, а значения f1 1..100.

3. Если в поле f1 уникальные значения, то что с индексом (f1,f2), что с индексом (f1) у тебя запрос с условием f1=:x выдаст одну (максимум) запись. Соответственно, и f1=:x and f2=:y - тоже максимум одна запись. Следовательно, ключ f2 индекса будет только занимать место на диске, приводить к лишним чтениям и занимать лишнюю память. В таком случае индекс с ключами (f1,f2) бесполезен и даже вреден , надо делать только индекс (f1).
То же самое касается случаев, когда в f1 значения "почти" одинаковые. Например, дата/время, или еще что-то, что ты знаешь, в силу специфики твоей задачи. Т.е. если ты знаешь точно, что запрос с f1=:x будет выдавать единицы записей, то 2-й ключ делать не надо .

Какой случай у тебя - я хз.
У меня, например, много огромных таблиц, в которых есть индексы с ключем (TERMINAL_ID,SHIFT_ID). Терминалов больше ста, смен в каждом терминале несколько тысяч. И за каждую смену в зависимости от таблицы от одной записи до десятков тысяч записей. Иногда использую индексы даже с тремя ключами.
Все запросы TERMINAL_ID= AND SHIFT_ID= работают мгновенно уже более 10 лет. К слову сказать, оптимизатор ФБ всегда для таких запросов верный план подбирает (конкретно для этого случая проблем не было ни разу).

И еще, напоследок. Тебе тут советовали факи многие уважаемые люди. Прочти их. Хоть раз в жизни придется прочитать для понимания, как это работает. Как вообще индексы работают. Как используют битовую маску ключа, как сортируются и вообще, теорию почитай. Для общего понимания, зачем это надо.
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38910024
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockесть индексы с ключем (TERMINAL_ID,SHIFT_ID). Терминалов больше ста, смен в каждом терминале несколько тысячпочему порядок полей в индексе именно такой?
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38910506
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00ch,

Как зачем. Чтобы по всему терминалу за всю историю суммы считать. Чтобы за период смен суммы считать... А что? Смены, кстати, с единицы в каждом терминале идут.
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38912264
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Спасибо за объяснение. С методами доступа к данным в FB я знаком в целом. В твоем ответе не рассмотрен случай, когда индексы созданы отдельно для полей f1, f2. Разница между индексами f1 и (f1, f2) очевидна. Если у нас есть индексы отдельные на f1 и f2, для запроса f1=:x and f2=:y оптимизатор сначала будет использовать лучший индекс из этих двух, а после отбора по полю лучшего индекса применит оставшийся индекс, так?
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38912296
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloper,

нет не так. Перечитай статью ещё раз.
Можно ещё трёшку поставить и посмотреть что там explain план говорит. Очень полезно для понимания что и как работает.

Вот маленький пример

Код: sql
1.
2.
3.
SELECT *
FROM FARM
WHERE CODE_COUNTRY = 1 AND CODE_OWNERSHIP = 5



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Select Expression
    -> Filter
        -> Table "FARM" Access By ID
            -> Bitmap And
                -> Bitmap
                    -> Index "FK_FARM_COUNTRY" Range Scan (full match)
                -> Bitmap
                    -> Index "FK_FARM_OWNERSHIP" Range Scan (full match)

из плана видно, что по каждому из индексов создаются битовые маски, а потом они объединяются и лишь только потом идёт выборка из таблицы по внутреннему идентификатору RDB$DB_KEY

Теперь посмотрим что будет когда индекс создан по двум полям

Код: sql
1.
CREATE INDEX REGISTRATION_IDX_HORSE_REGTYPE ON REGISTRATION (CODE_HORSE, CODE_REGTYPE);



Код: sql
1.
2.
3.
SELECT *
FROM REGISTRATION R
WHERE R.code_horse = 742363 AND r.code_regtype = 6



Код: plaintext
1.
2.
3.
4.
Select Expression
    -> Filter
        -> Table "REGISTRATION" as "R" Access By ID
            -> Bitmap
                -> Index "REGISTRATION_IDX_HORSE_REGTYPE" Range Scan (full match)

Из плана видно, что битовая маска строится один раз, а потом сразу идёт выборка из таблицы по внутреннему идентификатору RDB$DB_KEY

Что немного дешевле. Скоко это будет в цифрах хз. Надо мерить в каждом конкретном случае.
...
Рейтинг: 0 / 0
Целесообразность создания композитных индексов
    #38912297
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

теперь понятно, спасибо.
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Целесообразность создания композитных индексов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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