powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Порядок условий в where
12 сообщений из 12, страница 1 из 1
Порядок условий в where
    #39235041
the_moon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет,

играет ли какую то роль порядок условий в where в случае DB2?

Имею ввиду, есть индекс по полям А, Б, В, есть индекс по полям Г, Д

Нужно в таком же порядке записывать условия в селекте?

Код: sql
1.
where  А = 1 AND Б = 2 AND В = 3 AND Г = 4



И еще, есть проиндексированное поле, в котором три разных значения "NEW", "UPDATE", "CANCEL"

Как лучше искать

Код: sql
1.
2.
3.
4.
5.
(STATE = "NEW" OR STATE = "UPDATE")
или 
STATE in ( "NEW", "UPDATE" )
или 
STATE <> "CANCEL"




Может все это не имеет значения и все апросы все равно будут переписанны в соотвествии со статистиками?

Спасибо

Может есть умная статья по этому поводу?
...
Рейтинг: 0 / 0
Порядок условий в where
    #39235078
the_moon,

порядок роли не играет. в силу коммутативности и транзитивности оператора AND
...
Рейтинг: 0 / 0
Порядок условий в where
    #39235085
the_moon,

если в поле всего три значения и распределение данных близко к равномерному, то как ни пиши - индекс использовать не будет в виду его низкой селективности
...
Рейтинг: 0 / 0
Порядок условий в where
    #39235107
the_moon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эхthe_moon,

если в поле всего три значения и распределение данных близко к равномерному, то как ни пиши - индекс использовать не будет в виду его низкой селективности

Да это аргумент. А если "CANCEL" значение встречается реже чем "NEW" и "UPDATE" и индекс составной к примеру по CLIENTNO, CONTRACTNO и STATE

где CLIENTNO, CONTRACTNO это внешние ключи?
...
Рейтинг: 0 / 0
Порядок условий в where
    #39235174
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эхthe_moon,

если в поле всего три значения и распределение данных близко к равномерному, то как ни пиши - индекс использовать не будет в виду его низкой селективности

Неверно в случае MDC (многомерных кластеров), которые построены как индексы (вместо RID-ов блоки строк).

OR, если я правильно помню, переписывается на IN.
...
Рейтинг: 0 / 0
Порядок условий в where
    #39235183
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
the_moonДобрый Э - Эхthe_moon,

если в поле всего три значения и распределение данных близко к равномерному, то как ни пиши - индекс использовать не будет в виду его низкой селективности

Да это аргумент. А если "CANCEL" значение встречается реже чем "NEW" и "UPDATE" и индекс составной к примеру по CLIENTNO, CONTRACTNO и STATE

где CLIENTNO, CONTRACTNO это внешние ключи?

Судя по контексту, CLIENTNO и CONTRACTNO в условии фильтрации не упоминаются. Знаю про два возможных сценария использования.

1. Индекс полностью сканируется, в процессе фильтруется по STATE='CANCEL'.
2. Для возможной каждой пары (CLIENTNO, CONTRACTNO) ищется STATE='CANCEL' (как если бы это был UNION ALL из индексов)

Не вполне уверен, что DB2 умеет второй сценарий.

Да лучше натравите на свой запрос Index Adivser и спросите его, что он предложит.
...
Рейтинг: 0 / 0
Порядок условий в where
    #39235186
Victor MetelitsaНеверно в случае MDCи много ты их в среднестатистической системе видел? Я ни одного.
...
Рейтинг: 0 / 0
Порядок условий в where
    #39235190
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Индексы у DB2 в ораклячьем смысле компрессованные, т.е. для каждого значения идёт список RID'ов (у Oracle надо явно задавать, у DB2 всегда). Это ещё не считая собственно DB2-шной компрессии. Поэтому, когда selectivity слаба, они очень-очень маленькие. Для случаев select count(*) from ... where state=:var (то бишь, index only access) очень выгодные, несмотря на слабую selectivity.
...
Рейтинг: 0 / 0
Порядок условий в where
    #39235196
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - ЭхVictor MetelitsaНеверно в случае MDCи много ты их в среднестатистической системе видел? Я ни одного.
MDC - один из видов табличного партишионирования, хотя в чём-то лучше ораклячьего, а в чём-то хуже. Люди ораклячье партишионирование где-то видят. Ну да, на DB2 я имею дело только с самописной системой, а Oracle у нас SE1, но не все люди такие.
...
Рейтинг: 0 / 0
Порядок условий в where
    #39235210
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Порядок условий в where
    #39235219
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.perf.doc/doc/c0005299.html?lang=en
см. про Index Jump Scan.
Однако из описания и примеров непонятно, может ли первая колонка быть Index Gap'ом.
...
Рейтинг: 0 / 0
Порядок условий в where
    #39235248
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не может (пока?).
Тут куча примеров на тему:

http://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.perf.doc/doc/r0024842.html?lang=en
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Порядок условий в where
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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