Попытка понять влияние на производительность использования оператора case, который включает в себя предложение IN, содержащее несколько значений (запрос 1 ниже), а не один логический оператор меньше (запрос 2 ниже).Должно ли предложение IN выполнять несколько логических проверок для данного поля?Например, предполагая, что строка не соответствует критериям первого запроса, равным 1, должна ли следующая запись проверять свое поле first_rating_number на 2, затем 3 и 4, если ни один из них не присутствует?Это будет медленнее, чем first_rating_number <5 (как во втором запросе)?</p>
Я запустил план выполнения, и Oracle говорит мне, что стоимость эквивалентна и что байты немного выше во втором запросе.Это не имеет смысла для меня.Спасибо всем заранее.
Изменить - Дополнительная информация: Вчера я получал разные байты, первый запрос показывал меньше.Сегодня оба плана показывают идентичную информацию плана объяснения.
Количество рядов: 1 261 914
Запрос 1 Объяснить план: Стоимость - 22 134;Байт - 3 785 742
Запрос 2 Объяснить план: Стоимость - 22 134;Байт - 3 785 742
SELECT
CASE WHEN first_rating_number = 1 THEN 'AAA'
WHEN first_rating_number IN (2,3,4) THEN 'AA'
WHEN first_rating_number IN (5,6,7) THEN 'A'
WHEN first_rating_number IN (8,9,10) THEN 'BBB'
WHEN first_rating_number IN (11,12,13) THEN 'BB'
WHEN first_rating_number IN (14,15,16) THEN 'B'
WHEN first_rating_number IN (17,18,19) THEN 'CCC'
WHEN first_rating_number IN (20) THEN 'CC'
WHEN first_rating_number IN (22) THEN 'D' END first_rating_category_test
FROM tbl_IN_CLAUSE;
SELECT
CASE WHEN first_rating_number = 1 THEN 'AAA'
WHEN first_rating_number <5 THEN 'AA'
WHEN first_rating_number <8 THEN 'A'
WHEN first_rating_number <11 THEN 'BBB'
WHEN first_rating_number <14 THEN 'BB'
WHEN first_rating_number <17 THEN 'B'
WHEN first_rating_number <20 THEN 'CCC'
WHEN first_rating_number = 20 THEN 'CC'
WHEN first_rating_number = 22 THEN 'D' END first_rating_category_test
FROM tbl_LESS_THAN;