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

Привет всем! Подскажите пожалуйста, поймал очень странную ситуацию. Есть запрос

с final извлекающий 10млн строк, у него есть фильтр. В случае селективной фильтрации (убираются почти все строки) запрос работает в разы медленней чем при неселективной фильтрации. Планы запросов одинаковые (кроме фильтра), read_rows, read_bytes тоже одинаковые. Но, потребление памяти у медленного запроса в 2 раза выше.

Выглядит очень странным что фильтрация, которая убрала кучу строк, сделала запросу хуже. При этом все вычисления одинаковые. Может кто сталкивался с таким?

15 ответов

10 просмотров

skip index есть? без final также странно ведет?

Lex-Kojevnikov Автор вопроса
Denny [Altinity]
skip index есть? без final также странно ведет?

Без final так же (чуть быстрее, но такая же разница в 2-3раза между запросами). Skip индексов нет.

Lex Kojevnikov
Без final так же (чуть быстрее, но такая же разниц...

а возможно в секции select этой колонки нет? -- это нормально тогда. Представьте у вас таблица размером 100ГБ и 99ГБ из них это одна колонка, если этой колонки не касаться то запрос будет быстрым

Lex-Kojevnikov Автор вопроса
Denny [Altinity]
а возможно в секции select этой колонки нет? -- эт...

В обоих запросах фильтр есть и он затрагивает одинаковые колонки. Просто в одном варианте он оказывается более селективным (медленный вариант) чем в другом. Запрос не содержит limit, т.е. всегда придется обойти до конца.

Lex Kojevnikov
В обоих запросах фильтр есть и он затрагивает один...

ну хз тогда. Надо смотреть DDL таблицы и запрос

Lex-Kojevnikov Автор вопроса
Denny [Altinity]
ну хз тогда. Надо смотреть DDL таблицы и запрос

Спасибо! Попробую покопаться в trace_log если разберусь с ним.

Lex-Kojevnikov Автор вопроса
Denny [Altinity]
ну хз тогда. Надо смотреть DDL таблицы и запрос

Немного раскопал. Деградация производительности происходит когда когда к маленькой таблице джойнится большая. В нашем случае за уменьшение первой таблицы отвечает фильтр. Если условно представить, то выглядит примерно так: Выполняется за 10 секунд. select * from table1 (1млн строк) right join table2 (1млн строк) Выполняется за 30секунд select * from table1 (10тыс строк) right join table2 (1млн строк)

Lex Kojevnikov
Немного раскопал. Деградация производительности пр...

у вас right join у вас всегда table1 джойнится к table2 а limit есть в запросе?

Lex-Kojevnikov Автор вопроса
Denny [Altinity]
у вас right join у вас всегда table1 джойнится к...

limit нет, точнее я его убрал и разницы нет.

Lex Kojevnikov
limit нет, точнее я его убрал и разницы нет.

покажите статистику 2х запросов эту : Elapsed: 0.008 sec. Processed 18.19 thousand rows, 317.46 KB (2.17 million rows/s., 37.89 MB/s.)

Lex-Kojevnikov Автор вопроса
Denny [Altinity]
покажите статистику 2х запросов эту : Elapsed: 0....

Селективный и медленный: Elapsed: 48.898 sec. Processed 19.16 million rows, 6.70 GB (391.92 thousand rows/s., 137.01 MB/s.) Неселективный и быстрый: Elapsed: 15.081 sec. Processed 19.18 million rows, 6.71 GB (1.27 million rows/s., 445.11 MB/s.) Первый очень долго висел на 99%, но, кажется это нормально.

Lex Kojevnikov
Селективный и медленный: Elapsed: 48.898 sec. Proc...

ну попробуйте set join_algorithm = 'hash' и выполните запросы

Lex-Kojevnikov Автор вопроса
Denny [Altinity]
ну попробуйте set join_algorithm = 'hash' и выполн...

Пробовал, кажется даже все алгоритмы. Разница не очень ощутима.

Lex Kojevnikov
Пробовал, кажется даже все алгоритмы. Разница не о...

если на left join переделать и поменять таблицы местами?

Lex-Kojevnikov Автор вопроса
Denny [Altinity]
если на left join переделать и поменять таблицы ме...

То же самое. Попробовал полностью обнулить запрос первой таблицы, стало еще чуть медленней.

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

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

type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
45
А чем вам питонисты не угодили?😂
.
79
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
А дин типизация это хорошо или плохо?
Alexey
12
Исходники плюс документация? Вы гоните)) демок хватит всем
zamtmn
11
Я хочу задать вопрос на тему "ещё одного" языка для входа на fpc. Ну, чтобы через флаг {$mode} фронт мог воспринимать "немножко другой синтаксис с той же самой семантикой... Э...
Wlad
4
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Hello. Could you please help me with finding all coordinates within a radius using a spatial index, given that I have a table with coordinates? SET @lng = 37.57925; SET @lat ...
Rinchin G
7
Карта сайта