Вопрос по индексам

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
VictorIn
Сообщения: 26
Зарегистрирован: 25 мар 2005, 22:16

Вопрос по индексам

Сообщение VictorIn » 15 дек 2005, 05:26

Использую: Yaffil 889, Delphi7 + IBX.

В запросах, при выборке данных, в условиях фильтрования,
сортировки и JOIN-тах в одной из таблиц используются
integer поле A и char поле Б.
(Либо только А, либо A и Б одновременно. Если дополнительно используется Б,
то только в фильтровании и сортировке – отдельно Б не используется).
В связи с чем, был создан составной индекс (А, Б).

Вопрос: Стоит ли с точки зрения производительности запросов использующих
в условиях фильтрования или JOIN-тах только поле А,
дополнительно создавать отдельный по этому полю индекс?
Или составного будет достаточно?.

Дополнительная инфа:
А и Б в FK и PK не входят.
Составной индекс (A,B) неуникальный.
Стоимость добавления записей в таблицу не имеет значения.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 15 дек 2005, 10:08

если по A чаще поиск идет на >, < и т.п., а не на =, как отдельно так и совместно с поиском по B, то лучше этот составной индекс убить, и по A и B, если нет никаких индексов, создать отдельные.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 15 дек 2005, 13:05

kdv писал(а):если по A чаще поиск идет на >, < и т.п., а не на =, как отдельно так и совместно с поиском по B, то лучше этот составной индекс убить, и по A и B, если нет никаких индексов, создать отдельные.
Если при этом селективность индекса по B не получится 0.5 или ближе к 1 и случаются запросы на отбор большинства значений в B. Тогда лучше оставить композит. Второй сегмент жрать почти не просит, даже если условие по первому не даёт его использовать. А пользу иной раз принести может, не принося вреда.

VictorIn
Сообщения: 26
Зарегистрирован: 25 мар 2005, 22:16

Сообщение VictorIn » 17 дек 2005, 01:19

Merlin писал(а):Второй сегмент жрать почти не просит, даже если условие по первому не даёт его использовать. А пользу иной раз принести может, не принося вреда.
Спасибо за ответ. В принципе, это я и хотел услышать. Т.е. правильно ли я понимаю: составной индекс (А,Б) можно смело использовать вместо обычного (А), если в условиях отбора участвует только поле A. Дополнительную пользу от составного индекса можно извлечь только, когда в запросах используется одновременно (and) отбор по A и Б, причем А в этом случае должно быть исключительно в условиях тождества (А=?)?
В других ситуациях использование такого составного индекса не имеет смысла? Или есть еще какие-то неочевидные моменты, для которых он нужен?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 18 дек 2005, 18:19

все правильно, других неочевидных моментов нет. Кроме order by a, b, group by a, b и т.п. я так понимаю, вопрос об этом?

Ответить