powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Индекс с IN
11 сообщений из 11, страница 1 из 1
Индекс с IN
    #38820520
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это нормально что при наличии индекса по полям A,B,C и условии
A=x and B=y and C in (v1, v2)
индекс не используется ?
...
Рейтинг: 0 / 0
Индекс с IN
    #38820523
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. Должен использовать (по первым 2 сегментам).

Воспроизводится?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Индекс с IN
    #38820524
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov,

DDL индекса?
...
Рейтинг: 0 / 0
Индекс с IN
    #38820550
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил. Используется.
...
Рейтинг: 0 / 0
Индекс с IN
    #38822088
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvasviridenkov,

DDL индекса?

CREATE INDEX TICKETS_IDX2 ON TICKETS (PERFORMER_ID, PARENT_ID, STATE_ID);

Не, там конечно есть еще индекс на PERFORMER_ID, PARENT_ID но почему этот не используется если в IN всего два значения.
При разложении вручную через OR (всех условий) все отлично работает, но это же маразм
...
Рейтинг: 0 / 0
Индекс с IN
    #38822091
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov,

осталось теперь сопоставить PERFORMER_ID, PARENT_ID, STATE_ID и A, B, C из первого поста.

asviridenkovно почему этот не используется если в IN всего два значения.
на бумажке нарисуй значения таблицы, штук 5 столбцов. А потом подумай, как можно использовать индекс по этим данным и условию поиска.

asviridenkovПри разложении вручную через OR (всех условий) все отлично работает, но это же маразм
это не маразм, и такой топик тут уже был (про аналогичную ситуацию). И возможно даже, топик был твой.

A=x and B=y and C in (v1, v2)
=
(A = x and B=y and C = v1)
OR
(A = x and B=y and C = v2)
...
Рейтинг: 0 / 0
Индекс с IN
    #38822102
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovПри разложении вручную через OR (всех условий) все отлично работает, но это же маразм
это не маразм, и такой топик тут уже был (про аналогичную ситуацию). И возможно даже, топик был твой.

A=x and B=y and C in (v1, v2)
=
(A = x and B=y and C = v1)
OR
(A = x and B=y and C = v2)[/quot]

Ну я такое разложение и имел в виду, собственно. Если его явным образом писать, индекс используется и запрос работает на порядок быстрее
...
Рейтинг: 0 / 0
Индекс с IN
    #38822106
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov,

насколько я помню тот топик, оптимизатор так разложить не может.
...
Рейтинг: 0 / 0
Индекс с IN
    #38822107
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov,

а индекса по столбцам A и B не хватает? прямо так сильно надо, чтобы и C использовался?
...
Рейтинг: 0 / 0
Индекс с IN
    #38822277
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvasviridenkov,

а индекса по столбцам A и B не хватает? прямо так сильно надо, чтобы и C использовался?

Прям так сильно, да. 15мс против 250. Есть разница?

Суть в том, что распределение по значениям С очень неравномерное, 0 и 1 мало, а 2 много. И интересуют именно 0 и 1.
...
Рейтинг: 0 / 0
Индекс с IN
    #38822500
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov,

Гы! введи индекс по выражению (c<2)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Индекс с IN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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