我做了这个测试,结果看起来计数功能是线性的.我有另一个功能强烈依赖效率知道是否有任何数据,所以我想知道如何用另一个更有效(可能是常量?)的查询或数据结构替换这个选择计数(*).
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扫描(成本= 0.00..31.40行= 2140宽度= 0) (实际时间= 0.02 8..0.468行= 1000次循环= 1)总运行时间:0.846 ms (3 filas)
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扫描(成本= 0.00..173.07行= 9907宽度= 0) (实际时间= 0.0 09..3.407行= 10000循环= 1)总运行时间:6.271 ms (3 filas)
psql -d testdb -U postgres -f truncate_and_insert_100000_rows.sql> NUL
psql -d testdb -U postgres -f count_data.sql
Aggregate(cost = 2051.60..2051.61 rows = 1 width = 0)(实际时间= 74.075..74.076 rows = 1 loops = 1) - > Seq Scan on datos(cost = 0.00..1788.48 rows = 105248 width = 0 )(实际时间= 0.032..46.024行= 100000次循环= 1)总运行时间:74.164 ms (3 filas)
psql -d prueba -U postgres -f truncate_and_insert_1000000_rows.sql> NUL
psql -d testdb -U postgres -f count_data.sql
Aggregate(cost = 19720.00..19720.01 rows = 1 width = 0)(实际时间= 637.486..637.4 87行= 1个循环= 1) - > Seq Scan on datos(cost = 0.00..17246.60 rows = 989360 width = 0 )(实际时间= 0.028..358.831行= 1000000次循环= 1)总运行时间:637.582 ms (3 filas)
数据的定义是
CREATE TABLE data ( id INTEGER NOT NULL, text VARCHAR(100), CONSTRAINT pk3 PRIMARY KEY (id) );
Tometzky.. 12
从表限制1中选择true;
从表限制1中选择true;