172 похожих чатов

Есть sql-запрос, вызываемый из приложения (ниже представлен сильно упрощенный вариант

с сохранением сути). На вход передаётся идентификатор документа первого уровня и массив натуральных ключей (допустим, опять же для простоты, что это связка имя-фамилия). Цель - найти идентификаторы документов третьего уровня, в связке с натуральными ключами, которые встречаются в переданном массиве. И вот эти конкатенации, касты к json и т.п. нереально тормозят запрос (если оставить те же join-ы одни, производительность возрастает в 20 раз) - можно ли с этим ужасом что-то сделать?

WITH keys AS (
SELECT hstore( %2%::TEXT[], array_fill(1::text, array[0]) ) natkey
)
SELECT thrd_lvl_documents.id, concat(
UPPER(COALESCE(thrd_lvl_documents.data::json#>'{employee}'->>'SecondName', '')) ||
UPPER(COALESCE(thrd_lvl_documents.data::json#>'{employee}'->>'Name', ''))
)AS nat_key
FROM
thrd_lvl_documents
JOIN snd_lvl_documents ON thrd_lvl_documents.snd_lvl_doc = snd_lvl_documents.id
JOIN fst_lvl_documents ON snd_lvl_documents.fst_lvl_doc = fst_lvl_documents.id
JOIN keys ON keys.natkey->concat(
UPPER(COALESCE(thrd_lvl_documents.data::json#>'{employee}'->>'SecondName', '')) ||
UPPER(COALESCE(thrd_lvl_documents.data::json#>'{employee}'->>'Name', ''))
) IS NOT NULL
WHERE
fst_lvl_documents.id = %1%::bigint

8 ответов

3 просмотра

что-то пересокращали: - не хватает SELECT - не понятна конструкция `JOIN keys ON keys.natkey->concat(…` - ну и надо бы EXPLAIN (analyze, buffers) чтобы видеть как тормозит

Vadim-Ushakov Автор вопроса
Виктор Егоров
что-то пересокращали: - не хватает SELECT - не пон...

Select добавил. JOIN keys ON keys.natkey->concat фактически, оригинальный перл автора данного запроса (на входе массив натуральных ключей кастится к hstore, а тут мы, получая очередную запись thrd_lvl_documents на месте выдёргиваем из данных куски, соединяем их воедино и проверяем оператором "->" наличие этих данных в hstore). Explain с замазанными названиями таблиц и полей вам что-нибудь даст?

Vadim Ushakov
Select добавил. JOIN keys ON keys.natkey->concat ф...

засуньте в explain.depesz.com, там есть анонимизация и удаление планов

Vadim-Ushakov Автор вопроса
Виктор Егоров
засуньте в explain.depesz.com, там есть анонимизац...

За сайт отдельное спасибо - не знал про существование подобного ресурса с автоматической анонимизацией.

Vadim Ushakov
https://explain.depesz.com/s/LJFc

- оценка записей для romeo_charlie плывёт, надо проанализировать; - всё время тратите на фильтрацию при слиянии. может вместо того, чтобы городить эту конструкцию c keys, посмотреть на оператор @@ и jsonpath? или сделать проверку на вхождение массива [ SecondName, Name ] в ваши keys? чтобы перенести фильтрацию из JOIN-а в IndexScan.

Vadim-Ushakov Автор вопроса
Виктор Егоров
- оценка записей для romeo_charlie плывёт, надо пр...

С индексом romeo_charlie мне ничего и не дадут сделать, а вот второй и третий совет попробую копнуть глубже - спасибо за помощь.

Vadim Ushakov
С индексом romeo_charlie мне ничего и не дадут сд...

это не индекс, а таблица. нужно ANALYZE сделать

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Есть ли смысл устраиваться на 1с ? Даст это плюс в дальнейшем трудоустройстве на php? Просто у меня в городе вакансий на пхп нету. Или лучше удаленно искать. Опыта работы нету...
Azamat
14
а где есть mysql cloud кроме яндекс-клауд?
Oleg Nosov
13
hi im a cs student. i need some advice from people who have enough experience in Embedded Software. I need to know whether this profession is suitable for me. I have watched s...
Sahand 🏔️
8
Не ну фпц - это уже просто троллинг какой-то. Элементарный код нельзя собрать. ЧЯДНТ? program Project1; {$mode delphi} uses SysUtils, Classes, Generics.Collections; var...
Peter
4
вот что получается в интерпрететоре, работает и результаты выгляд разумными, но то как выглядит код мне не нравиться, а понять куда двигаться не очень могу, если кому не лень ...
Fedor
42
Карта сайта