Я сделал это тесты, и результаты, кажется, масштабируются линейно. У меня есть другая функция, которая сильно зависит от эффективности, чтобы знать, есть ли какие-либо данные, поэтому я хотел бы знать, как заменить этот счетчик выбора (*) другим более эффективным (может быть постоянным?) Запросом или структурой данных.
psql -d testdb -U postgres -f truncate_and_insert_1000_rows.sql> NUL
psql -d testdb -U postgres -f count_data.sql
----------------------------------------------- ---------------------------------
Агрегат (стоимость = 36.75..36.76 строк = 1 ширина = 0) (фактическое время = 0.762..0.763 строк = 1
петли = 1)
-> Seq Scan на данных (стоимость = 0,00..31,40 строк = 2140 ширина = 0) (фактическое время = 0,02
8..0.468 строк = 1000 циклов = 1)
Общее время выполнения: 0,846 мс
(3 фила)
psql -d testdb -U postgres -f truncate_and_insert_10000_rows.sql> NUL
psql -d testdb -U postgres -f count_data.sql
----------------------------------------------- ---------------------------------
Агрегат (стоимость = 197.84..197.85 строк = 1 ширина = 0) (фактическое время = 6.191..6.191 строк =
1 петля = 1)
-> Seq Scan на данных (стоимость = 0.00..173.07 строк = 9907 ширина = 0) (фактическое время = 0.0
09..3.407 строк = 10000 циклов = 1)
Общее время выполнения: 6,271 мс
(3 фила)
psql -d testdb -U postgres -f truncate_and_insert_100000_rows.sql> NUL
psql -d testdb -U postgres -f count_data.sql
----------------------------------------------- ---------------------------------
Совокупный (стоимость = 2051.60..2051.61 строк = 1 ширина = 0) (фактическое время = 74.075..74.076 р
ows = 1 петли = 1)
-> Seq Scan на данных (стоимость = 0.00..1788.48 строк = 105248 ширина = 0) (фактическое время =
0.032..46.024 строки = 100000 циклов = 1)
Общее время выполнения: 74,164 мс
(3 фила)
psql -d prueba -U postgres -f truncate_and_insert_1000000_rows.sql> NUL
psql -d testdb -U postgres -f count_data.sql
----------------------------------------------- ---------------------------------
Совокупный (стоимость = 19720.00..19720.01 строк = 1 ширина = 0) (фактическое время = 637.486..637.4
87 строк = 1 петля = 1)
-> Seq Scan на данных (стоимость = 0,00..17246.60 строк = 989360 ширина = 0) (фактическое время
= 0.028..358.831 строк = 1000000 циклов = 1)
Общее время выполнения: 637,582 мс
(3 фила)
определение данных
CREATE TABLE data
(
id INTEGER NOT NULL,
text VARCHAR(100),
CONSTRAINT pk3 PRIMARY KEY (id)
);