Страница 1 из 1

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

Добавлено: 15 дек 2005, 05:26
VictorIn
Использую: Yaffil 889, Delphi7 + IBX.

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

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

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

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

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

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

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