powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Оптимизация запроса с выражением in
25 сообщений из 58, страница 1 из 3
Оптимизация запроса с выражением in
    #38672998
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как правильно оптимизировать запросы с выражением "in" вида:
Код: sql
1.
select * from table where field1 in (:value11,:value12) and field2 = :value2 


в случае, если по полю field1 есть индекс, но он не подхватывается из-за использования "in"?
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673015
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Interloper!
You wrote on 18 июня 2014 г. 14:26:58:

Interloper> по полю field1 есть индекс, но он не подхватывается
> из-за использования "in"?
если бы я не был так хорошо воспитан, я сказал бы "не песди".

но поскольку это таки не так, то я позволю себе поинтересоваться
версией сервера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673072
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

1.5.
Ты хочешь сказать, что in никогда не влияет на построение плана??
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673084
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloper,

влияет. in преобразуется в ORы. Не помню как там в 1.5 было, но ЕМНИП подхватывается или не подхватывается индекс при in зависит от селективности и количества элементов в in.
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673092
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Мне приходилось вместо in явно использовать OR, и тогда индекс подхватывается. Это нормальная техника оптимизации или можно еще как-то?
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673095
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperМне приходилось вместо in явно использовать OR, и тогда индекс подхватывается
не верю (с)
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673101
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperМне приходилось вместо in явно использовать OR, и тогда индекс
подхватывается. Это нормальная техника оптимизации или можно еще как-то?
Это бред твоего воспалённого мозга. IN "унутре" разворачивается в пачку OR, так что между
ними не существует разницы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673146
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Бред несешь ты. Если в условии отбора есть фильтрация по другим полям, то автоматический разворот в OR не поможет.
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673153
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Interloper!
You wrote on 18 июня 2014 г. 15:45:20:

Interloper> Бред несешь ты. Если в условии отбора есть фильтрация по другим полям,
> то автоматический разворот в OR не поможет.
и всё таки, не смотря на всю мою воспитанность, я таки скажу: не песди.

Код: sql
1.
2.
3.
4.
5.
SELECT * FROM RDB$RELATION_FIELDS r
WHERE r.RDB$RELATION_NAME IN (:NAME1, :NAME2)
  AND r.RDB$FIELD_NAME = :NAME3

PLAN (R INDEX (RDB$INDEX_15, RDB$INDEX_4, RDB$INDEX_4))


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673156
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим, есть индекс по полям (F1, F2) с хорошей селективностью.
Для запроса
Код: sql
1.
2.
  SELECT * FROM TABLE1
  WHERE F1 IN (:V11,:V22) AND F2 = :V2 AND F3 = :V3 AND F4 = :V4


в плане не будет использования индекса (F1,F2) на первом месте. А вот если переписать запрос так, то все хорошо:
Код: sql
1.
2.
3.
  SELECT * FROM TABLE1
  WHERE (F1 = :V11 AND F2 = :V2 AND F3 = :V3 AND F4 = :V4) 
    OR (F1 = :V12 AND F2 = :V2 AND F3 = :V3 AND F4 = :V4)
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673161
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloper,

с чего ты взял что так будет лучше? Ты статистику чтений сравнивал при фетче всех данных. Или тупо пытаешься использовать все индексы?
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673167
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Лучше в плане выбора индекса с лучшей селективностью.
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673174
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloper,

я тебя спрашивал о количестве фетчей.
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673175
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Чтений меньше в варианте с "in", но эти чтения обработаны с помощью индексов с худшей селективностью по сравнению со вторым вариантом.
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673177
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Фетчей меньше в варианте с in
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673185
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperЧтений меньше в варианте с "in", но эти чтения обработаны с помощью индексов с худшей селективностью по сравнению со вторым вариантом."Так вам шашечки или ехать?"
Если вы предполагаете, что при использовании индексов с лучшей селективностью чтений станет ещё меньше, то, вероятно, вас не затруднит привести пример такого варианта вашего запроса?
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673193
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloper,

шёл бы ты читать Firebird: Методы доступа к данным

Стоимость доступа в данный момент измеряется в фетчах.

Код: sql
1.
2.
3.
4.
select * 
from table 
where field1 in (:value11,:value12) and 
         field2 = :value2



разворачивается в

Код: sql
1.
2.
3.
4.
select * 
from table 
where (field1 = :value11 or field1 = :value12) and 
         field2 = :value2



а не в то что ты написал.
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673225
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Больше чтений на хороших индексах может выполняться быстрее, чем меньше чтений на плохих.
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673233
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

А где я сказал, что оно разворачивается во что-то другое? Я привел способ написания запроса другой! Читай внимательнее.

P.S. И давно мы на ты, кстати?
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673237
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloper,

гонишь. Читай статью
Когда говоришь о чтениях уточняй о каких. Есть чтения с диска (Reads), а есть из кэша (Fetches).
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673242
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperБольше чтений на хороших индексах может выполняться быстрее, чем меньше чтений на плохих."Когда вы говорите, Иван Васильевич, такое впечатление, что вы бредите".
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673249
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperP.S. И давно мы на ты, кстати?

Модератор: Обращение на "ты" тут принято. Предлагаю сторонам снизить обороты.
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673254
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Вы хотите сказать, что 10 чтений, каждое из которых выполняется за 100 мс, это быстрее, чем 100 чтений, каждое из которых выполняется за 5 мс?
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673257
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Я в курсе, какие виды чтения есть.
...
Рейтинг: 0 / 0
Оптимизация запроса с выражением in
    #38673262
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperВы хотите сказать, что 10 чтений, каждое из которых выполняется за 100 мс, это быстрее, чем 100 чтений, каждое из которых выполняется за 5 мс?Начните с того, что изложите гипотезу, на основании которой вы делаете такие оценки.

P.S. "Селективность индекса" и "смежные данные" - разные и (вообще никак) не связанные понятия.
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 1 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Оптимизация запроса с выражением in
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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