Использую: Yaffil 889, Delphi7 + IBX.
В запросах, при выборке данных, в условиях фильтрования,
сортировки и JOIN-тах в одной из таблиц используются
integer поле A и char поле Б.
(Либо только А, либо A и Б одновременно. Если дополнительно используется Б,
то только в фильтровании и сортировке – отдельно Б не используется).
В связи с чем, был создан составной индекс (А, Б).
Вопрос: Стоит ли с точки зрения производительности запросов использующих
в условиях фильтрования или JOIN-тах только поле А,
дополнительно создавать отдельный по этому полю индекс?
Или составного будет достаточно?.
Дополнительная инфа:
А и Б в FK и PK не входят.
Составной индекс (A,B) неуникальный.
Стоимость добавления записей в таблицу не имеет значения.
Вопрос по индексам
Если при этом селективность индекса по B не получится 0.5 или ближе к 1 и случаются запросы на отбор большинства значений в B. Тогда лучше оставить композит. Второй сегмент жрать почти не просит, даже если условие по первому не даёт его использовать. А пользу иной раз принести может, не принося вреда.kdv писал(а):если по A чаще поиск идет на >, < и т.п., а не на =, как отдельно так и совместно с поиском по B, то лучше этот составной индекс убить, и по A и B, если нет никаких индексов, создать отдельные.
Спасибо за ответ. В принципе, это я и хотел услышать. Т.е. правильно ли я понимаю: составной индекс (А,Б) можно смело использовать вместо обычного (А), если в условиях отбора участвует только поле A. Дополнительную пользу от составного индекса можно извлечь только, когда в запросах используется одновременно (and) отбор по A и Б, причем А в этом случае должно быть исключительно в условиях тождества (А=?)?Merlin писал(а):Второй сегмент жрать почти не просит, даже если условие по первому не даёт его использовать. А пользу иной раз принести может, не принося вреда.
В других ситуациях использование такого составного индекса не имеет смысла? Или есть еще какие-то неочевидные моменты, для которых он нужен?