Skip to content

Performance issue with specific case #2401

@voidlol

Description

@voidlol

Hey there! I'm using JsqlParser to parse sql queries that come to my app from external sources. Those sql statements are runtime-generated based on templates user created. So, these sql queries are not optimized at all.

Here is one example
SELECT "тип" AS "тип", SUM((CASE WHEN 'Портфель заказов' = 'Портфель заказов' THEN CASE WHEN "Открытый заказ" = 'Да' AND ("тип" = 'Прогноз' OR ('Весь объем' = 'НП' AND "тип" = 'КПРАО')) AND EXTRACT(YEAR FROM "Дата договора") <= 2025 AND "Тип документа" <> 'Проект (<70)' AND ('Весь объем' <> 'НП' OR "Новый продукт" = 'Да' AND ("Организация Росатом" <> 'Да' OR ('Консолидированно' <> 'Консолидированно' AND "ВГО РОСАТОМ" = '+'))) AND ('Весь объем' <> 'Зарубеж' OR "Страна покупателя" <> 'РОССИЯ') AND ('Консолидированно' <> 'Консолидированно' OR "ВГО РОСАТОМ" <> '+') AND ('Дивизион' = 'Дивизион' OR "Предприятие" = 'Дивизион') AND "Предприятие" <> 'ТТ ААЭМ' AND CAST("Год" AS INTEGER) BETWEEN 2025 + 1 AND 2025 + 10 THEN CASE WHEN 'Весь объем' = 'НП' THEN (CASE WHEN "Выручка" = '-' THEN 0 ELSE CAST(replace("Выручка", ',', '.') AS decimal (18, 4)) END) - (CASE WHEN "Перенос" = '-' THEN 0 ELSE CAST(REPLACE("Перенос", ',', '.') AS DECIMAL (18, 4)) END) ELSE (CASE WHEN "Выручка" = '-' THEN 0 ELSE CAST(replace("Выручка", ',', '.') AS decimal (18, 4)) END) END / CASE WHEN 'Сценарный' = 'Сценарный' THEN "Дол" WHEN 'Весь объем' = 'Зарубеж' THEN "Курс_дол" ELSE 1 END / NULLIF(CASE WHEN 'Сценарный' = 'Сценарный' AND 'Весь объем' = 'Зарубеж' THEN 1 WHEN 'Сценарный' = 'Сценарный' THEN "Руб" ELSE "Курс" END, 0) / CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END ELSE 0 END ELSE CASE WHEN "Открытый заказ" = 'Да' AND ("тип" = 'Прогноз' OR ('Весь объем' = 'НП' AND "тип" = 'КПРАО')) AND EXTRACT(YEAR FROM "Дата договора") <= 2025 AND "Тип документа" <> 'Проект (<70)' AND ('Весь объем' <> 'НП' OR "Новый продукт" = 'Да' AND ("Организация Росатом" <> 'Да' OR ('Консолидированно' <> 'Консолидированно' AND "ВГО РОСАТОМ" = '+'))) AND ('Весь объем' <> 'Зарубеж' OR "Страна покупателя" <> 'РОССИЯ') AND ('Консолидированно' <> 'Консолидированно' OR "ВГО РОСАТОМ" <> '+') AND ('Дивизион' = 'Дивизион' OR "Предприятие" = 'Дивизион') AND "Предприятие" <> 'ТТ ААЭМ' AND CAST("Год" AS INTEGER) = 2025 THEN CASE WHEN 'Весь объем' = 'Зарубеж' THEN (CASE WHEN "Факт USD" = '-' THEN 0 ELSE CAST(replace("Факт USD", ',', '.') AS decimal (18, 4)) END) + (CASE WHEN "Прогноз1 USD" = '-' THEN 0 ELSE CAST(replace("Прогноз1 USD", ',', '.') AS decimal (18, 4)) END) ELSE (CASE WHEN "Факт RUB" = '-' THEN 0 ELSE CAST(replace("Факт RUB", ',', '.') AS decimal (18, 4)) END) + (CASE WHEN "Прогноз1 RUB" = '-' THEN 0 ELSE CAST(replace("Прогноз1 RUB", ',', '.') AS decimal (18, 4)) END) END / CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END + (CASE WHEN "Прогноз2 валюта договора" = '-' THEN 0 ELSE CAST(replace("Прогноз2 валюта договора", ',', '.') AS decimal (18, 4)) END) / CASE WHEN 'Сценарный' = 'Сценарный' THEN "Дол" WHEN 'Весь объем' = 'Зарубеж' THEN "Курс_дол" ELSE 1 END / NULLIF(CASE WHEN 'Сценарный' = 'Сценарный' AND 'Весь объем' = 'Зарубеж' THEN 1 WHEN 'Сценарный' = 'Сценарный' THEN "Руб" ELSE "Курс" END, 0) / CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END ELSE 0 END + CASE WHEN "Открытый заказ" = 'Да' AND ("тип" = 'Прогноз' OR ('Весь объем' = 'НП' AND "тип" = 'КПРАО')) AND EXTRACT(YEAR FROM "Дата договора") = 2025 AND "Тип документа" = 'Проект (>=70)' AND ('Весь объем' <> 'НП' OR ("Новый продукт" = 'Да' AND "Организация Росатом" <> 'Да')) AND ('Весь объем' <> 'Зарубеж' OR "Страна покупателя" <> 'РОССИЯ') AND "ВГО РОСАТОМ" <> '+' AND ('Дивизион' = 'Дивизион' OR "Предприятие" = 'Дивизион') AND "Предприятие" <> 'ТТ ААЭМ' AND CAST("Год" AS INTEGER) = 2025 THEN (CASE WHEN "Выручка" = '-' THEN 0 ELSE CAST(replace("Выручка", ',', '.') AS decimal (18, 4)) END) / CASE WHEN 'Сценарный' = 'Сценарный' THEN "Дол" WHEN 'Весь объем' = 'Зарубеж' THEN "Курс_дол" ELSE 1 END / NULLIF(CASE WHEN 'Сценарный' = 'Сценарный' AND 'Весь объем' = 'Зарубеж' THEN 1 WHEN 'Сценарный' = 'Сценарный' THEN "Руб" ELSE "Курс" END, 0) / CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END ELSE 0 END END) - ((CASE WHEN CASE WHEN 'Весь объем' = 'НП' THEN ("тип" = 'БП' OR "тип" = 'БПКПРАО') ELSE "тип" = 'БП' END AND EXTRACT(YEAR FROM "Дата договора") <= 2025 AND CASE WHEN 'Весь объем' = 'НП' THEN "Новый продукт" = 'Да' AND CASE WHEN 'Консолидированно' = 'Консолидированно' THEN "Организация Росатом" <> 'Да' ELSE "Организация Росатом" <> 'Да' OR ("Организация Росатом" = 'Да' AND "ВГО РОСАТОМ" = '+') END WHEN 'Весь объем' = 'Зарубеж' THEN "Страна покупателя" <> 'РОССИЯ' ELSE true END AND "Предприятие" <> 'ТТ ААЭМ' AND CASE WHEN 'Консолидированно' = 'Консолидированно' THEN "ВГО РОСАТОМ" <> '+' ELSE true END AND "Предприятие" = CASE WHEN 'Дивизион' = 'Дивизион' THEN "Предприятие" ELSE 'Дивизион' END AND CASE WHEN 'Портфель заказов' = 'Портфель заказов' THEN CAST("Год" AS INTEGER) > 2025 AND CAST("Год" AS INTEGER) < (2025 + 11) ELSE CAST("Год" AS INTEGER) = 2025 END THEN (CASE WHEN "Выручка" = '-' THEN 0 ELSE CAST(replace("Выручка", ',', '.') AS decimal (18, 4)) END) / CASE WHEN 'Весь объем' = 'Зарубеж' THEN "Дол" ELSE "Дол" / NULLIF("Руб", 0) END ELSE 0 END) / (CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END))) AS "Лист 6.1 Прогноз - БП", NULL AS "coloring_0", CASE WHEN (SUM(((CASE WHEN 'Портфель заказов' = 'Портфель заказов' THEN CASE WHEN "Открытый заказ" = 'Да' AND ("тип" = 'Прогноз' OR ('Весь объем' = 'НП' AND "тип" = 'КПРАО')) AND EXTRACT(YEAR FROM "Дата договора") <= 2025 AND "Тип документа" <> 'Проект (<70)' AND ('Весь объем' <> 'НП' OR "Новый продукт" = 'Да' AND ("Организация Росатом" <> 'Да' OR ('Консолидированно' <> 'Консолидированно' AND "ВГО РОСАТОМ" = '+'))) AND ('Весь объем' <> 'Зарубеж' OR "Страна покупателя" <> 'РОССИЯ') AND ('Консолидированно' <> 'Консолидированно' OR "ВГО РОСАТОМ" <> '+') AND ('Дивизион' = 'Дивизион' OR "Предприятие" = 'Дивизион') AND "Предприятие" <> 'ТТ ААЭМ' AND CAST("Год" AS INTEGER) BETWEEN 2025 + 1 AND 2025 + 10 THEN CASE WHEN 'Весь объем' = 'НП' THEN (CASE WHEN "Выручка" = '-' THEN 0 ELSE CAST(replace("Выручка", ',', '.') AS decimal (18, 4)) END) - (CASE WHEN "Перенос" = '-' THEN 0 ELSE CAST(REPLACE("Перенос", ',', '.') AS DECIMAL (18, 4)) END) ELSE (CASE WHEN "Выручка" = '-' THEN 0 ELSE CAST(replace("Выручка", ',', '.') AS decimal (18, 4)) END) END / CASE WHEN 'Сценарный' = 'Сценарный' THEN "Дол" WHEN 'Весь объем' = 'Зарубеж' THEN "Курс_дол" ELSE 1 END / NULLIF(CASE WHEN 'Сценарный' = 'Сценарный' AND 'Весь объем' = 'Зарубеж' THEN 1 WHEN 'Сценарный' = 'Сценарный' THEN "Руб" ELSE "Курс" END, 0) / CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END ELSE 0 END ELSE CASE WHEN "Открытый заказ" = 'Да' AND ("тип" = 'Прогноз' OR ('Весь объем' = 'НП' AND "тип" = 'КПРАО')) AND EXTRACT(YEAR FROM "Дата договора") <= 2025 AND "Тип документа" <> 'Проект (<70)' AND ('Весь объем' <> 'НП' OR "Новый продукт" = 'Да' AND ("Организация Росатом" <> 'Да' OR ('Консолидированно' <> 'Консолидированно' AND "ВГО РОСАТОМ" = '+'))) AND ('Весь объем' <> 'Зарубеж' OR "Страна покупателя" <> 'РОССИЯ') AND ('Консолидированно' <> 'Консолидированно' OR "ВГО РОСАТОМ" <> '+') AND ('Дивизион' = 'Дивизион' OR "Предприятие" = 'Дивизион') AND "Предприятие" <> 'ТТ ААЭМ' AND CAST("Год" AS INTEGER) = 2025 THEN CASE WHEN 'Весь объем' = 'Зарубеж' THEN (CASE WHEN "Факт USD" = '-' THEN 0 ELSE CAST(replace("Факт USD", ',', '.') AS decimal (18, 4)) END) + (CASE WHEN "Прогноз1 USD" = '-' THEN 0 ELSE CAST(replace("Прогноз1 USD", ',', '.') AS decimal (18, 4)) END) ELSE (CASE WHEN "Факт RUB" = '-' THEN 0 ELSE CAST(replace("Факт RUB", ',', '.') AS decimal (18, 4)) END) + (CASE WHEN "Прогноз1 RUB" = '-' THEN 0 ELSE CAST(replace("Прогноз1 RUB", ',', '.') AS decimal (18, 4)) END) END / CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END + (CASE WHEN "Прогноз2 валюта договора" = '-' THEN 0 ELSE CAST(replace("Прогноз2 валюта договора", ',', '.') AS decimal (18, 4)) END) / CASE WHEN 'Сценарный' = 'Сценарный' THEN "Дол" WHEN 'Весь объем' = 'Зарубеж' THEN "Курс_дол" ELSE 1 END / NULLIF(CASE WHEN 'Сценарный' = 'Сценарный' AND 'Весь объем' = 'Зарубеж' THEN 1 WHEN 'Сценарный' = 'Сценарный' THEN "Руб" ELSE "Курс" END, 0) / CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END ELSE 0 END + CASE WHEN "Открытый заказ" = 'Да' AND ("тип" = 'Прогноз' OR ('Весь объем' = 'НП' AND "тип" = 'КПРАО')) AND EXTRACT(YEAR FROM "Дата договора") = 2025 AND "Тип документа" = 'Проект (>=70)' AND ('Весь объем' <> 'НП' OR ("Новый продукт" = 'Да' AND "Организация Росатом" <> 'Да')) AND ('Весь объем' <> 'Зарубеж' OR "Страна покупателя" <> 'РОССИЯ') AND "ВГО РОСАТОМ" <> '+' AND ('Дивизион' = 'Дивизион' OR "Предприятие" = 'Дивизион') AND "Предприятие" <> 'ТТ ААЭМ' AND CAST("Год" AS INTEGER) = 2025 THEN (CASE WHEN "Выручка" = '-' THEN 0 ELSE CAST(replace("Выручка", ',', '.') AS decimal (18, 4)) END) / CASE WHEN 'Сценарный' = 'Сценарный' THEN "Дол" WHEN 'Весь объем' = 'Зарубеж' THEN "Курс_дол" ELSE 1 END / NULLIF(CASE WHEN 'Сценарный' = 'Сценарный' AND 'Весь объем' = 'Зарубеж' THEN 1 WHEN 'Сценарный' = 'Сценарный' THEN "Руб" ELSE "Курс" END, 0) / CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END ELSE 0 END END) - ((CASE WHEN CASE WHEN 'Весь объем' = 'НП' THEN ("тип" = 'БП' OR "тип" = 'БПКПРАО') ELSE "тип" = 'БП' END AND EXTRACT(YEAR FROM "Дата договора") <= 2025 AND CASE WHEN 'Весь объем' = 'НП' THEN "Новый продукт" = 'Да' AND CASE WHEN 'Консолидированно' = 'Консолидированно' THEN "Организация Росатом" <> 'Да' ELSE "Организация Росатом" <> 'Да' OR ("Организация Росатом" = 'Да' AND "ВГО РОСАТОМ" = '+') END WHEN 'Весь объем' = 'Зарубеж' THEN "Страна покупателя" <> 'РОССИЯ' ELSE true END AND "Предприятие" <> 'ТТ ААЭМ' AND CASE WHEN 'Консолидированно' = 'Консолидированно' THEN "ВГО РОСАТОМ" <> '+' ELSE true END AND "Предприятие" = CASE WHEN 'Дивизион' = 'Дивизион' THEN "Предприятие" ELSE 'Дивизион' END AND CASE WHEN 'Портфель заказов' = 'Портфель заказов' THEN CAST("Год" AS INTEGER) > 2025 AND CAST("Год" AS INTEGER) < (2025 + 11) ELSE CAST("Год" AS INTEGER) = 2025 END THEN (CASE WHEN "Выручка" = '-' THEN 0 ELSE CAST(replace("Выручка", ',', '.') AS decimal (18, 4)) END) / CASE WHEN 'Весь объем' = 'Зарубеж' THEN "Дол" ELSE "Дол" / NULLIF("Руб", 0) END ELSE 0 END) / (CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END)))) >= 0) THEN '{"color":"#273D79FF","backgroundColor":"#87D9F9FF","iconId":null,"onlyIcon":false,"barProps":null}' WHEN (SUM(((CASE WHEN 'Портфель заказов' = 'Портфель заказов' THEN CASE WHEN "Открытый заказ" = 'Да' AND ("тип" = 'Прогноз' OR ('Весь объем' = 'НП' AND "тип" = 'КПРАО')) AND EXTRACT(YEAR FROM "Дата договора") <= 2025 AND "Тип документа" <> 'Проект (<70)' AND ('Весь объем' <> 'НП' OR "Новый продукт" = 'Да' AND ("Организация Росатом" <> 'Да' OR ('Консолидированно' <> 'Консолидированно' AND "ВГО РОСАТОМ" = '+'))) AND ('Весь объем' <> 'Зарубеж' OR "Страна покупателя" <> 'РОССИЯ') AND ('Консолидированно' <> 'Консолидированно' OR "ВГО РОСАТОМ" <> '+') AND ('Дивизион' = 'Дивизион' OR "Предприятие" = 'Дивизион') AND "Предприятие" <> 'ТТ ААЭМ' AND CAST("Год" AS INTEGER) BETWEEN 2025 + 1 AND 2025 + 10 THEN CASE WHEN 'Весь объем' = 'НП' THEN (CASE WHEN "Выручка" = '-' THEN 0 ELSE CAST(replace("Выручка", ',', '.') AS decimal (18, 4)) END) - (CASE WHEN "Перенос" = '-' THEN 0 ELSE CAST(REPLACE("Перенос", ',', '.') AS DECIMAL (18, 4)) END) ELSE (CASE WHEN "Выручка" = '-' THEN 0 ELSE CAST(replace("Выручка", ',', '.') AS decimal (18, 4)) END) END / CASE WHEN 'Сценарный' = 'Сценарный' THEN "Дол" WHEN 'Весь объем' = 'Зарубеж' THEN "Курс_дол" ELSE 1 END / NULLIF(CASE WHEN 'Сценарный' = 'Сценарный' AND 'Весь объем' = 'Зарубеж' THEN 1 WHEN 'Сценарный' = 'Сценарный' THEN "Руб" ELSE "Курс" END, 0) / CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END ELSE 0 END ELSE CASE WHEN "Открытый заказ" = 'Да' AND ("тип" = 'Прогноз' OR ('Весь объем' = 'НП' AND "�2026-03-07T14:44:27.373903777Z �ип" = 'КПРАО')) AND EXTRACT(YEAR FROM "Дата договора") <= 2025 AND "Тип документа" <> 'Проект (<70)' AND ('Весь объем' <> 'НП' OR "Новый продукт" = 'Да' AND ("Организация Росатом" <> 'Да' OR ('Консолидированно' <> 'Консолидированно' AND "ВГО РОСАТОМ" = '+'))) AND ('Весь объем' <> 'Зарубеж' OR "Страна покупателя" <> 'РОССИЯ') AND ('Консолидированно' <> 'Консолидированно' OR "ВГО РОСАТОМ" <> '+') AND ('Дивизион' = 'Дивизион' OR "Предприятие" = 'Дивизион') AND "Предприятие" <> 'ТТ ААЭМ' AND CAST("Год" AS INTEGER) = 2025 THEN CASE WHEN 'Весь объем' = 'Зарубеж' THEN (CASE WHEN "Факт USD" = '-' THEN 0 ELSE CAST(replace("Факт USD", ',', '.') AS decimal (18, 4)) END) + (CASE WHEN "Прогноз1 USD" = '-' THEN 0 ELSE CAST(replace("Прогноз1 USD", ',', '.') AS decimal (18, 4)) END) ELSE (CASE WHEN "Факт RUB" = '-' THEN 0 ELSE CAST(replace("Факт RUB", ',', '.') AS decimal (18, 4)) END) + (CASE WHEN "Прогноз1 RUB" = '-' THEN 0 ELSE CAST(replace("Прогноз1 RUB", ',', '.') AS decimal (18, 4)) END) END / CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END + (CASE WHEN "Прогноз2 валюта договора" = '-' THEN 0 ELSE CAST(replace("Прогноз2 валюта договора", ',', '.') AS decimal (18, 4)) END) / CASE WHEN 'Сценарный' = 'Сценарный' THEN "Дол" WHEN 'Весь объем' = 'Зарубеж' THEN "Курс_дол" ELSE 1 END / NULLIF(CASE WHEN 'Сценарный' = 'Сценарный' AND 'Весь объем' = 'Зарубеж' THEN 1 WHEN 'Сценарный' = 'Сценарный' THEN "Руб" ELSE "Курс" END, 0) / CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END ELSE 0 END + CASE WHEN "Открытый заказ" = 'Да' AND ("тип" = 'Прогноз' OR ('Весь объем' = 'НП' AND "тип" = 'КПРАО')) AND EXTRACT(YEAR FROM "Дата договора") = 2025 AND "Тип документа" = 'Проект (>=70)' AND ('Весь объем' <> 'НП' OR ("Новый продукт" = 'Да' AND "Организация Росатом" <> 'Да')) AND ('Весь объем' <> 'Зарубеж' OR "Страна покупателя" <> 'РОССИЯ') AND "ВГО РОСАТОМ" <> '+' AND ('Дивизион' = 'Дивизион' OR "Предприятие" = 'Дивизион') AND "Предприятие" <> 'ТТ ААЭМ' AND CAST("Год" AS INTEGER) = 2025 THEN (CASE WHEN "Выручка" = '-' THEN 0 ELSE CAST(replace("Выручка", ',', '.') AS decimal (18, 4)) END) / CASE WHEN 'Сценарный' = 'Сценарный' THEN "Дол" WHEN 'Весь объем' = 'Зарубеж' THEN "Курс_дол" ELSE 1 END / NULLIF(CASE WHEN 'Сценарный' = 'Сценарный' AND 'Весь объем' = 'Зарубеж' THEN 1 WHEN 'Сценарный' = 'Сценарный' THEN "Руб" ELSE "Курс" END, 0) / CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END ELSE 0 END END) - ((CASE WHEN CASE WHEN 'Весь объем' = 'НП' THEN ("тип" = 'БП' OR "тип" = 'БПКПРАО') ELSE "тип" = 'БП' END AND EXTRACT(YEAR FROM "Дата договора") <= 2025 AND CASE WHEN 'Весь объем' = 'НП' THEN "Новый продукт" = 'Да' AND CASE WHEN 'Консолидированно' = 'Консолидированно' THEN "Организация Росатом" <> 'Да' ELSE "Организация Росатом" <> 'Да' OR ("Организация Росатом" = 'Да' AND "ВГО РОСАТОМ" = '+') END WHEN 'Весь объем' = 'Зарубеж' THEN "Страна покупателя" <> 'РОССИЯ' ELSE true END AND "Предприятие" <> 'ТТ ААЭМ' AND CASE WHEN 'Консолидированно' = 'Консолидированно' THEN "ВГО РОСАТОМ" <> '+' ELSE true END AND "Предприятие" = CASE WHEN 'Дивизион' = 'Дивизион' THEN "Предприятие" ELSE 'Дивизион' END AND CASE WHEN 'Портфель заказов' = 'Портфель заказов' THEN CAST("Год" AS INTEGER) > 2025 AND CAST("Год" AS INTEGER) < (2025 + 11) ELSE CAST("Год" AS INTEGER) = 2025 END THEN (CASE WHEN "Выручка" = '-' THEN 0 ELSE CAST(replace("Выручка", ',', '.') AS decimal (18, 4)) END) / CASE WHEN 'Весь объем' = 'Зарубеж' THEN "Дол" ELSE "Дол" / NULLIF("Руб", 0) END ELSE 0 END) / (CASE WHEN 'Весь объем' = 'Зарубеж' THEN 1 ELSE 1000 END)))) <= 0) THEN '{"color":"#DC1C0CFF","backgroundColor":"#EAD0D0FF","iconId":null,"onlyIcon":false,"barProps":null}' ELSE NULL END AS "coloring_1" FROM (SELECT "тип", "Тип документа", "Унифицированный код", "Предприятие", "Бизнес направление", "Новый продукт", "Объект (станция)", "Блок объекта", "Наименование покупателя", "Страна покупателя", "Организация Росатом", "Ключевой заказ", "Вероят получ заказа" AS "Вероят получения заказ", "Номер договора", "Предмет договора", "Валюта договора" AS "Валюта", "Дата договора", "ВГО РОСАТОМ", "ВГО АЭМ", "Категория продукции", "Вид продукции", "Дата посл изм док" AS "Дата послед измен док", "Дата создания документа", "Открытый заказ", "Статус работы", "Статус", "Причина завершения", "Общ стоим дог тыс ед", "Факт валюта договора", "Факт RUB", "Факт USD", "Прогноз1 валюта договора", "Прогноз1 RUB", "Прогноз1 USD", "Прогноз2 валюта договора", "Прогноз2 RUB", "Прогноз2 USD", "Год", "Выручка", "Вероят испол выручки" AS "Вероят исполн выручки", "Риски", "Комментарий", "Перенос", "СценарныеУсловия", "Дол", "Руб", "Курс", "Курс_дол", "БП по БК2", "ЦУ КПЭ", "НУ КПЭ", "ЦУ выручка" FROM "bi_data"."v_massive_su") v13ca28644a0f4af9869465def634f52a GROUP BY "тип" LIMIT 100

This sql takes 12-15 seconds to parse on modern hardware, and more than 90 seconds on poor xeon :(

However, Apache Calcite parses this query in less than 100ms.

I would appreciate it if you could look into it and provide some optimizations for parsing speed

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions