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

Hey I’m looking for a tech advice: I want to estimate

the # of rows in a resultset for an OLAP query before acutally running the query on a huge table.
Motivation: return error early if the resultset estimated size is anyway too big for a client to process.

What I’m thinking now is to parse the output of EXLAIN + tune statistics for columns + run analyze more often. Is this going to work?
Or are there better solutions? 🙂

8 ответов

44 просмотра

There are much better solutions. Depending on the complexity of the query. If it were just one table, I believe there are articles (Cybertec) comes to mind, that explains what DETAILS are used to estimate the number of rows, because what the optimizer does and EXPLAIN does is open source and pretty well documented. I've done something similar to hit a single table for estimated rows from that table, as opposed to using an expensive select count()... when the actual count was NOT really important.

For a table you can use this query: ` SELECT reltuples::bigint AS estimate FROM pg_class WHERE relname = 'tablename' ;

Vitali Kotik- Автор вопроса
Stefanie Janine Stölting
For a table you can use this query: ` SELECT reltu...

Hey, thanks! It’s not that I need the total # of rows, but the # of rows that correspond to some query (WHERE + GROUP BY) 🙂

Vitali Kotik
Hey, thanks! It’s not that I need the total # of r...

Nope, the query I posted returns the numbers of records estimated. With a complex query there is no chance to estimate the numbers.

Vitali Kotik- Автор вопроса
Vitali Kotik
What is a complex query?

Anything containing joins, where, and/or group by. An estimation on such things is like rolling a dice with thousands of sites.

Vitali Kotik- Автор вопроса
Stefanie Janine Stölting
Anything containing joins, where, and/or group by....

I don’t have joins, but I do have WHERE and GROUP BY. I assumed that with different kinds of stats (https://www.postgresql.org/docs/current/planner-stats.html) planner could do that

Vitali Kotik
I don’t have joins, but I do have WHERE and GROUP ...

Well, read the source code of the planner. It's a very complex thing and it doesn't estimate the count of rows.

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта